题目背景

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 寒假作业 (树状数组)相关推荐

  1. [luogu] P2345 MooFest G 树状数组

    前言 传送门 : 思路 很好的一个 树状数组入门题 我们可以通过树状数组维护 sumsumsum 和 cntcntcnt最后计算出答案 CODE struct node {int v,x;bool o ...

  2. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

  3. Luogu P4178 Tree (点分治 + 树状数组)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4178 Prob ...

  4. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  5. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  6. 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)

    正题 luogu CF1137F 题目大意 定义一棵树的产出序列为依次删除权值最小的叶子节点的顺序 进行q此操作: 1.把一个点的权值改为当前树中的最大权值+1 2.查询一个点在删除序列中的位置 3. ...

  7. Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组

    题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...

  8. 【luogu P4183】Cow at Large P(点分治)(图论)(树状数组)

    Cow at Large P 题目链接:luogu P4183 题目大意 给你一棵树,然后叶子节点可以放守卫. 然后有个人在树上,然后每个时刻那个人和守卫都可以移动,如果人和守卫相遇人就被抓了,如果人 ...

  9. 【Luogu】P3369 【模板】普通平衡树(树状数组)

    P3369 [模板]普通平衡树(树状数组) 一.树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构. ...

最新文章

  1. Flex开发中遇到未整理资源
  2. [BUUCTF-pwn]——test_your_nc
  3. TCP socket和web socket的区别
  4. cmd控制远程电脑运行程序_电脑远程控制怎么,远程桌面开启教程
  5. php 生成缩略图保存,PHP批量生成图片缩略图的方法
  6. .net 下URL重写
  7. sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...
  8. jdk Collections类
  9. html中渐变怎么写,css3如何实现文字渐变?
  10. 除了UL认证,开拓美国市场必备认证有哪些?
  11. Linux 重命名文件和文件夹
  12. 公众号开发精品教程(4)——生成带参数的二维码及合成海报
  13. 申请ios开发者证书到获取p12文件及profiles文件
  14. 哥德巴赫猜想(python)
  15. 【论文阅读】Efficient Illuminant Estimation for Color Constancy Using Grey Pixels
  16. Hololens单击、双击
  17. 手机PIN、PUK码之谜
  18. Win11系统新建的excel表格怎么保存到桌面?
  19. Excel办公常用函数:6大类型,共计64个!
  20. 软考和 PMP考哪个比较好?各自的价值是什么?

热门文章

  1. 世界第一台电子计算机名称是什么,I1世界第一台电子计算机的英文名称是.doc
  2. 晋中计算机专业对口大学,山西晋中计算机专业学校排名太重技校抓住机会
  3. (转载)R14也称作子程序连接寄存器
  4. CC1101无法进入WOR状态,参照手册发送SWOR命令之前应该是空闲状态并且WORCTRL.RC_PD=0.
  5. 计算机ppt操作知识,计算机基础知识:PPT常用操作(三)
  6. 中e管家你想投资理财吗
  7. 工具---《.264视频 转成 MP4视频》
  8. 量化投资学习——一些牛比的量化投资公司
  9. [附源码]计算机毕业设计springboot志愿者服务平台
  10. 使用库函数点亮第一个LED灯