luogu 2717 寒假作业 (树状数组)
题目背景
zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊。
题目描述
他们共有n项寒假作业。zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力。zzs现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于k?
简单地说,给定n个正整数A1,A2,A3,...,An,求出有多少个连续的子序列的平均值不小于k。
输入输出格式
输入格式:
第一行两个正整数,n和k。
第二行到第n+1行,每行一个正整数Ai。
输出格式:
一个非负整数。
输入输出样例
输入样例#1:
3 2
1
2
3
输出样例#1:
4
说明
样例解释:共有6个连续的子序列,分别是(1)、(2)、(3)、(1,2)、(2,3)、(1,2,3),平均值分别为1、2、3、1.5、2.5、2,其中平均值不小于k的共有4个。
对于20%的数据,1<=n<=100;
对于50%的数据,1<=n<=5000;
对于100%的数据,1<=n<=100000;
对于100%的数据,1<=Ai<=10000,1<=k<=10000。
题目链接:https://www.luogu.org/problemnew/show/P2717
题目分析:要求的即所有满足(i<=j) (a[i]+a[i+1]+...+a[j])/(j-i+1) >= k的(i,j)对数
将上式转换 => a[i]-k + a[i+1]-k + ... + a[j]-k >= 0,令b[i]=a[i]-k
即 => b[i]+b[i+1]+...+b[j] >= 0,再令sum[i] = b[1]+b[2]+...+b[i]
即 => sum[j]-sum[i-1] >= 0 => sum[j] >= sum[i-1] (j >= i)
于是题目转换为求将原数组所有数字减k并求前缀和后的得到的数组的正序对数,树状数组搞一下即可
注:
1)i等于j时只需保证sum[i]>=0即可(设sum是m个元素的前缀和,则sum本身已经减去k*m了,原来的平均数必然>=k)
2)前缀和可能比较大且可能为负数,故数据需要离散化
3)需要long long
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
int const MAX = 100005;
int c[MAX], h[MAX], n, k, cnt;struct DATA {int id, val;
}d[MAX];bool cmp(DATA a, DATA b) {return a.val < b.val;
}int lowbit(int x) {return x & (-x);
}void add(int pos, int val) {for (int i = pos; i <= cnt; i += lowbit(i)) {c[i] += val;}
}int query(int pos) {int ans = 0;for (int i = pos; i > 0; i -= lowbit(i)) {ans += c[i];}return ans;
}int main() {scanf("%d %d", &n, &k);int tmp, presum = 0;ll ans = 0;for (int i = 1; i <= n; i++) {scanf("%d", &tmp);tmp -= k;presum += tmp;d[i].id = i;d[i].val = presum;if (presum >= 0) {ans++;}}cnt = 0;sort(d + 1, d + n + 1, cmp);for (int i = 1; i <= n; i++) {if (i > 1 && d[i].val == d[i - 1].val) {h[d[i].id] = cnt;} else{h[d[i].id] = ++cnt;}}for (int i = 1; i <= n; i++) {ans += (ll)query(h[i]);add(h[i], 1);}printf("%lld\n", ans);
}
luogu 2717 寒假作业 (树状数组)相关推荐
- [luogu] P2345 MooFest G 树状数组
前言 传送门 : 思路 很好的一个 树状数组入门题 我们可以通过树状数组维护 sumsumsum 和 cntcntcnt最后计算出答案 CODE struct node {int v,x;bool o ...
- 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」
6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...
- Luogu P4178 Tree (点分治 + 树状数组)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4178 Prob ...
- 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...
- 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)
正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti时在wiw_iwi出现(只出现一个单位时间),价值为sis_isi,当你t ...
- 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)
正题 luogu CF1137F 题目大意 定义一棵树的产出序列为依次删除权值最小的叶子节点的顺序 进行q此操作: 1.把一个点的权值改为当前树中的最大权值+1 2.查询一个点在删除序列中的位置 3. ...
- Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组
题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...
- 【luogu P4183】Cow at Large P(点分治)(图论)(树状数组)
Cow at Large P 题目链接:luogu P4183 题目大意 给你一棵树,然后叶子节点可以放守卫. 然后有个人在树上,然后每个时刻那个人和守卫都可以移动,如果人和守卫相遇人就被抓了,如果人 ...
- 【Luogu】P3369 【模板】普通平衡树(树状数组)
P3369 [模板]普通平衡树(树状数组) 一.树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构. ...
最新文章
- Flex开发中遇到未整理资源
- [BUUCTF-pwn]——test_your_nc
- TCP socket和web socket的区别
- cmd控制远程电脑运行程序_电脑远程控制怎么,远程桌面开启教程
- php 生成缩略图保存,PHP批量生成图片缩略图的方法
- .net 下URL重写
- sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...
- jdk Collections类
- html中渐变怎么写,css3如何实现文字渐变?
- 除了UL认证,开拓美国市场必备认证有哪些?
- Linux 重命名文件和文件夹
- 公众号开发精品教程(4)——生成带参数的二维码及合成海报
- 申请ios开发者证书到获取p12文件及profiles文件
- 哥德巴赫猜想(python)
- 【论文阅读】Efficient Illuminant Estimation for Color Constancy Using Grey Pixels
- Hololens单击、双击
- 手机PIN、PUK码之谜
- Win11系统新建的excel表格怎么保存到桌面?
- Excel办公常用函数:6大类型,共计64个!
- 软考和 PMP考哪个比较好?各自的价值是什么?
热门文章
- 世界第一台电子计算机名称是什么,I1世界第一台电子计算机的英文名称是.doc
- 晋中计算机专业对口大学,山西晋中计算机专业学校排名太重技校抓住机会
- (转载)R14也称作子程序连接寄存器
- CC1101无法进入WOR状态,参照手册发送SWOR命令之前应该是空闲状态并且WORCTRL.RC_PD=0.
- 计算机ppt操作知识,计算机基础知识:PPT常用操作(三)
- 中e管家你想投资理财吗
- 工具---《.264视频 转成 MP4视频》
- 量化投资学习——一些牛比的量化投资公司
- [附源码]计算机毕业设计springboot志愿者服务平台
- 使用库函数点亮第一个LED灯