1042.D Petya and Array 前缀 + 树状数组
11.19.2018
1042.D Petya and Array
New Point:
前缀 + 树状数组 :树状数组逐个维护前缀个数
Describe:
给你一个数组,一个标记数,问你有多少区间[l,r]使得这个区间的和小于这个标记数值
Solution:
没能想到
前缀数组 + 树状数组快速查询
记录前缀数组sum[i],得到区间和为sum[i] - sum[j] < t,转化为求sum[i] - t < sum[j],遍历i,求取情况,然后利用树状数组快速查询符合的区间j的个数
树状数组维护的是 sum[j],而且遍历i[1,n]的时候j的范围是[0,i-1],所以对于一个新i,我们应该找到sum[i-1]在树上的位置进行全局更新,但是对于第一个i,更新sum[0] = 0即可,可以想到j取0的时候表示a1 + …… + ai
Code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 1e3;
ll sum[maxn];
ll f[maxn];
ll tree[maxn];
int n;
ll lowbit(ll x)
{
return x & (-x);
}
void add(ll x)
{
while(x <= n+1)
{
++tree[x];
x += lowbit(x);
}
}
ll Get(ll x)
{
ll ans = 0;
while(x > 0)
{
ans += tree[x];
x -=lowbit(x);
}
return ans;
}
int main()
{
ll t;
while(~scanf("%d %lld",&n,&t))
{
memset(sum,0,sizeof(sum));
memset(tree,0,sizeof(tree));
for(int i = 1;i <= n;++i)
{
scanf("%lld",&sum[i]);
sum[i] += sum[i-1];
f[i] = sum[i];
}
f[0] = 0;
sort(f,f+n+1);
ll ans = 0;
for(int i = 1;i <= n;++i)
{
add(lower_bound(f,f+n+1,sum[i-1]) + 1 - f);
ans += i - Get(lower_bound(f,f+n+1,sum[i] - t + 1) - f);
}
printf("%lld\n",ans);
}
return 0;
}
1042.D Petya and Array 前缀 + 树状数组的更多相关文章
- Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)
D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...
- 【CF1042D】Petya and Array 离散化+树状数组
题目大意:给定一个长度为 N 的序列,给定常数 t,求有多少个区间 [l,r] 满足 \(\sum\limits_{i=l}^{r}a_i<t\). 题解:先跑一边前缀和,问题等价于求有多少个数 ...
- codeforces 1042D - Petya and Array【树状数组+离散化】
题目:戳这里 题意:有n个数,问有多少个区间满足[L,R]内的和小于t. 解题思路: [L,R]内的和小于t等价于sum[R]-sum[L-1]<t,将sum[L-1]左移,可以看出R与L的关系 ...
- codeforces 703D Mishka and Interesting sum 偶数亦或 离线+前缀树状数组
题目传送门 题目大意:给出n个数字,m次区间询问,每一次区间询问都是询问 l 到 r 之间出现次数为偶数的数 的亦或和. 思路:偶数个相同数字亦或得到0,奇数个亦或得到本身,那么如果把一段区间暴力亦或 ...
- HDU 4947 GCD Array 容斥原理+树状数组
GCD Array Time Limit: 11000/5500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- Codeforces 946G Almost Increasing Array (树状数组优化DP)
题目链接 Educational Codeforces Round 39 Problem G 题意 给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...
- CF 121E Lucky Array 【树状数组】
这个题目的数据感觉不能更水了.从复杂度上计算,肯定有极限数据可以卡掉暴力方法的么. 总之,暴力的做法就是树状数组了,对于区间更新,就挨个更新就是了.当然,判断是否是Lucky Number的话,可以用 ...
- Codeforces 220B - Little Elephant and Array 离线树状数组
This problem can be solve in simpler O(NsqrtN) solution, but I will describe O(NlogN) one. We will s ...
- PHP利用递归法获取多级类别的树状数组
数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...
随机推荐
- springboot添加自定义注解
spring拦截器是基于动态代理,注解就是拦截器,所以关于动态代理需要注意的坑,注解同样要注意. 1.创建注解类 /** * @Target 此注解的作用目标,括号里METHOD的意思说明此注解只能加 ...
- 记一次git翻车事件
昨天dmp上线了 本来整个流程是 1.在本地1.4分支开发,开发完成push到origin/1.4,在远程仓库把1.4 merge到master分支 2.本地online分支先pull一下远程onli ...
- synchronized锁机制 之 代码块锁(转)
synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间.这种情况下可以尝试使用 ...
- ubuntu16.04安装Navicate
1. http://download2.navicat.com/download/navicat100_mysql_en.tar.gz 2. tar -zxvf /home/rain/dow ...
- 在vue.js中使用echarts,数据动态刷新
在vue使用echarts时,可能会遇到这样的问题,就是直接刷新浏览器,或者数据变化时,echarts不更新? 这是因为Echarts是数据驱动的,这意味着只要我们重新设置数据,那么图表就会随之重新渲 ...
- 【深度好文】多线程之WaitHandle-->派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent
AutoResetEvent/ManualResetEvent 都是继承自 EventWaitHandle ,EventWaitHandle继承自WaitHandle. 在讨论这个问题之前,我们先了解 ...
- C# 线程获取/设置控件(TextBox)值
线程读写控件需要用委托(delegate)与Invoke/BeginInvoke来进行 参考内容:http://www.cnblogs.com/runner/archive/2011/12/30/23 ...
- django settings配置文件ALLOWED_HOSTS
ALLOWED_HOSTS列表为了防止黑客入侵,只允许列表中的ip地址访问 填写上“*”可以使所有的网址都能访问Django项目了,项目测试的时候,可以这么做.这样就失去了保护
- 详解键盘事件(keydown,keypress,keyup)
一.键盘事件基础 1.定义 keydown:按下键盘键 keypress:紧接着keydown事件触发(只有按下字符键时触发) keyup:释放键盘键 顺序为:keydown -> keypre ...
- 服务监控-zabbix监控指标
1.cpu unitzation 监控cpu的整体状态. 使用Zabbix查看CPU利用率,会有下面几个值: CPU idle time:空闲的cpu时间比[简称id] CPU user time:用 ...