题目背景

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. 整理了一个castle的文档,供大家学习使用
  2. 以太坊---「地址、密码、私钥、助记词、Keystore 」那些事
  3. Centos 7 防火墙
  4. 详解java集合之LinkedList——底层实现是头尾、双向节点,尽情地问我有没有看过集合源码吧!
  5. 设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现
  6. bootstrap 树形表格渲染慢_bootstrap table轻松实现数据表格
  7. Java生成荣誉证书PDF文件
  8. [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)
  9. sendTemplateMessage微信小程序消息推送 前段 + 后端(thinkphp3.2)
  10. centos u盘安装_利用Win32 Disk Imager 实现U盘刻录ISO
  11. 为企业发展赋能,让零散数据资源变为企业数据资产
  12. 计算机网络超详细笔记(三):数据链路层
  13. 【Makefile】简单的Makefile编写
  14. 2017数学建模B题摘要
  15. Laravel 数据库迁移
  16. 编译原理复习总结及思维导图
  17. Metrics、Tracing、Logging的融合
  18. iCollections—桌面管理工具
  19. 小码哥-玩转【斗鱼直播APP】系列之界面分析
  20. 如何优雅地使用 Sublime Text

热门文章

  1. 非SDK接口自动化检测工具--veridex
  2. keystroke java_KeyStroke_Java API中文文档 - java学习(http://www.yq1012.com)
  3. 地震勘探基础(十四)之地震反演
  4. JS小游戏-象棋暗棋
  5. 在通用计算机内pc是指什么地方,电脑版微信保存的文件在哪里?PC端微信文件保存位置是什么?...
  6. SpringMVC源码分析系列[转]
  7. 数字几何之笛卡儿的法国良心存在时间谭
  8. 如何使用佳能ir1133网络扫描功能
  9. Httpclient调用短信验证码接口
  10. mongodb学习笔记-tina