题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_c

题意:问数组a有多少子区间平均值为k

题解:一开始考虑过dp,但是显然不可行,其实将每一个数都减去k就不用求平均值了,然后就是求满足前缀和sum[r]-sum[l-1]>=0,有多少组就行了。有点像逆序对。

用线段树即可。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int M = 2e5 + 10;
struct TnT {
int pos;
ll val;
}nn[M];
struct node {
int l , r;
ll sum;
}T[M << 2];
bool cmp(TnT a , TnT b) {
if(a.val == b.val) return a.pos < b.pos;
return a.val < b.val;
}
void push_up(int i) {
T[i].sum = T[i << 1].sum + T[(i << 1) | 1].sum;
}
void build(int i , int l , int r) {
int mid = (l + r) >> 1;
T[i].l = l , T[i].r = r , T[i].sum = 0;
if(l == r) return ;
build(i << 1 , l , mid);
build((i << 1) | 1 , mid + 1 , r);
push_up(i);
}
void update(int i , int pos) {
int mid = (T[i].l + T[i].r) >> 1;
if(T[i].l == pos && T[i].r == pos) {
T[i].sum++;
return ;
}
if(mid < pos) update((i << 1) | 1 , pos);
else update(i << 1 , pos);
push_up(i);
}
ll query(int i , int l , int r) {
int mid = (T[i].l + T[i].r) >> 1;
if(T[i].l == l && T[i].r == r) {
return T[i].sum;
}
push_up(i);
if(mid < l) return query((i << 1) | 1 , l , r);
else if(mid >= r) return query(i << 1 , l , r);
else {
return query(i << 1 , l , mid) + query((i << 1) | 1 , mid + 1 , r);
}
}
int main() {
ll n , k , a;
scanf("%lld%lld" , &n , &k);
for(int i = 1 ; i <= n ; i++) {
scanf("%lld" , &a);
a -= k;
nn[i].pos = i;
nn[i].val = nn[i - 1].val + a;
}
sort(nn + 1 , nn + 1 + n , cmp);
ll ans = 0;
build(1 , 1 , (int)n);
for(int i = 1 ; i <= n ; i++) {
update(1 , nn[i].pos);
if(nn[i].val >= 0) ans++;
if(nn[i].pos - 1 == 0) continue;
ans += query(1 , 1 , nn[i].pos - 1);
}
printf("%lld\n" , ans);
return 0;
}

最新文章

  1. Android raw to bmp
  2. #id+变量
  3. Mysql学习笔记(八)由触发器回顾外键约束中的级联选项
  4. Android之TabHost布局(转)
  5. web端视频直播网站的弊端和优势
  6. openstack 中 log模块分析
  7. .equal与==的区别
  8. C++中为什么构造函数不能是虚函数,析构函数是虚函数
  9. Win7下安装IEWebControls.msi
  10. java:异常处理
  11. hive 学习笔记——表的入门操作和命令
  12. 说点手动导jar包的细节Referenced Libraries
  13. HeadFirst设计模式-前言总结
  14. 【java】Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
  15. TestNG+ExtentReports生成超漂亮的测试报告
  16. JVM基础系列第1讲:Java 语言的前世今生
  17. 【Python 19】BMR计算器3.0(字符串分割与格式化输出)
  18. Ubuntu安装mysql之后,编译找不到头文件
  19. 理解syslinux,SYSLINUX和PXELINUX
  20. c++ 如何获取多线程的返回值?(std::thread ,std::async)

热门文章

  1. 数据类型之Integer与int
  2. 【Python-Django后端】用户注册通用逻辑,用户名、手机号重名检测,注册成功后状态保持!!!
  3. Kibana对数据的可视化
  4. HDP Hive性能调优
  5. lvs+keepalived 高可用及负载均衡
  6. 解决报错:类型“System.Object”在未被引用的程序集中定义。必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用
  7. C语言编程学习打造——做题游戏
  8. 【游记】NOIP2019初赛
  9. kafka客户端和服务端开发(三)
  10. 变量Variable