思路:

离散化+树状数组(或权值线段树)。bit数组一定要开够。和求逆序对数量很像。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int MAXN = 200005;
 5 ll a[MAXN], b[MAXN], bit[2 * MAXN];
 6 int n;
 7 int lowbit(int x)
 8 {
 9     return x & -x;
10 }
11 ll sum(int x)
12 {
13     ll ans = 0;
14     while (x)
15     {
16         ans += bit[x];
17         x -= lowbit(x);
18     }
19     return ans;
20 }
21 void add(int i, ll x, int maxn)
22 {
23     while (i <= maxn)
24     {
25         bit[i] += x;
26         i += lowbit(i);
27     }
28 }
29 int main()
30 {
31     ll t;
32     while (cin >> n >> t)
33     {
34         memset(b, 0, sizeof b);
35         memset(bit, 0, sizeof bit);
36         for (int i = 1; i <= n; i++)
37         {
38             cin >> a[i];
39             b[i] = b[i - 1] + a[i];
40         }
41         vector<ll> v;
42         for (int i = 0; i <= n; i++)
43         {
44             v.push_back(b[i]);
45             v.push_back(b[i] + t);
46         }
47         sort(v.begin(), v.end());
48         v.erase(unique(v.begin(), v.end()), v.end());
49         ll ans = 0;
50         for (int i = n; i >= 1; i--)
51         {
52             int pos = lower_bound(v.begin(), v.end(), b[i]) - v.begin() + 1;
53             add(pos, 1, v.size());
54             pos = lower_bound(v.begin(), v.end(), b[i - 1] + t) - v.begin() + 1;
55             ans += sum(pos - 1);
56         }
57         cout << ans << endl;
58     }
59     return 0;
60 }

转载于:https://www.cnblogs.com/wangyiming/p/9692448.html

CF1042D Petya and Array相关推荐

  1. CF1042D Petya and Array 树状数组

    题目描述 Petya has an array a a a consisting of n n n integers. He has learned partial sums recently, an ...

  2. Problem - 1042D - D. Petya and Array(树状数组)

    D. Petya and Array 题目大意:给定长度为 n n n的序列 a a a,求出有多少组 l , r l,r l,r使得 a l + a l + 1 + a l + 2 + . . . ...

  3. D. Petya and Array(树状数组 + 前缀和 + 逆序对的思想)

    Problem - D - Codeforces Petya 有一个由 n 个整数组成的数组 a.他最近学习了部分和,现在他可以非常快地计算出数组中任何一段元素的和.这个段是一个非空的序列,相邻的元素 ...

  4. Codeforce 1042 D. Petya and Array(树状数组、前缀和)

    题目链接 省赛选拔学长说是CF的原题,赛后得知学长是用树状数组写的,补了一个树状数组的代码. 题意 NNN个数,问一共有多少个连续区间满足区间和小于 MMM 思路 记录每个数的前缀和sortsorts ...

  5. ★☆★cf D. Petya and Array

    http://codeforces.com/problemset/problem/1042/D 抽象成一个问题:一边增加数组长度,增加之后再随机找小于某阈值的数的个数. 树状数组,离散化,模拟运行一遍 ...

  6. D - Petya and Array(树状数组,二分)

    思路:对于al+..ara_l+..a_ral​+..ar​这种区间和问题一般都要考虑前缀差,然后问题就转化为了求sum[r]−sum[l−1]<tsum[r]-sum[l-1]<tsum ...

  7. Remove Duplicate

    题目描述: Petya has an array a consisting of n integers. He wants to remove duplicate (equal) elements. ...

  8. Codeforces Round #643 (Div. 2)

    这场是七点半的场,正好跑完步打了一下 于是: 害 还是太菜了 A - Sequence with Digits Let's define the following recurrence: an+1= ...

  9. Codeforces Round #481 (Div. 3)题解

    成功掉到灰,真的心太累了,orz!!!!,不是很懂那些国外大佬为什么每次都是20多分钟AK的,QAQ A. Remove Duplicates time limit per test 1 second ...

最新文章

  1. Dokcer安装Redis
  2. 什么是 SAP UI5 的 Component-preload.js, 什么是Minification和Ugification
  3. matlab 可视化界面,Matlab?的可视化界面设计
  4. 佛与道的浪漫-红颜弹指老,刹那芳华
  5. R语言将一列分解为多列
  6. chapter10--进程和计划任务管理
  7. Java的对象序列化之serialVersionUID问题
  8. 检错码与纠错码,一码归一码
  9. easyx游戏编程:魔塔(c++语言开发)源码
  10. hbuilder TODO插件
  11. infinity新标签页失效
  12. 好好说话之Tcache Attack(3):tcache stashing unlink attack
  13. C++编译错误C2440“类型转换”: 无法从“void (__thiscall COpenGLWnd::* )(void)”转换为“DuiLib::DUI_PMSG解决办法
  14. okcc呼叫中心系统防封号系统的工作原理
  15. Java中getBytes()方法--使用详解
  16. onchange、onpropertychange、oninput和onblur
  17. 海康监控主机无法登录后台解决办法
  18. 【Lua 教程系列第 4 篇】Lua 中的第一行代码 hello world
  19. 淘宝如何做到懂你的推荐的?揭秘千人千面个性化推荐原理!
  20. 计算机无法播放视频,电脑自带播放器无法播放视频怎么办

热门文章

  1. [ZJOI2008]骑士
  2. 4.二叉搜索树转为有序双向链表(递归算法与非递归算法)
  3. discuz核心函数库function_core的函数注释
  4. ubuntu12.04的NFS配置
  5. hdu 1133 Buy the Ticket(递推+精度精算)
  6. 让我们一起Go(二)
  7. PHP实现9x9乘法表
  8. window safari 怎么进入响应式_Web前端新手怎么入门 如何用CSS做响应式布局
  9. AI 是否会取代计算机程序员
  10. 二手车没有车险能过户吗?