http://acm.hdu.edu.cn/showproblem.php?pid=6315

题意

a数组初始全为0,b数组为1-n的一个排列。q次操作,一种操作add给a[l...r]加1,另一种操作query查询Σfloor(ai/bi)(i=l...r)。

分析

真的是太naive啦,现场时没做出来。

看见区间自然想起线段树,那么这里的关键就是整除问题,只有达到一定数量才会对区间和产生影响。

反过来想,先把a[i]置为b[i],那么每次add时就是-1操作,当a[i]为0时区间和+1,再把a[i]置为b[i]。这要求我们维护区间最小值和区间和。

若当前区间最小值大于1时,那么此时对这个区间进行add操作没有实质影响,于是用lazy标记先。当区间最小值为1时,向下更新,不断向下找,找到叶结点,区间和+1,a和lazy重新设置。query时就查询区间和即可。

#include<bits/stdc++.h>
using namespace std; const int N=1e5+; int a[N<<],lazy[N<<],b[N],sum[N<<];
int n;
void PushDown(int rt){
if(lazy[rt]){
lazy[rt<<]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
a[rt<<]-=lazy[rt];
a[rt<<|]-=lazy[rt];
lazy[rt]=;
}
}
void PushUp(int rt){
a[rt]=min(a[rt<<],a[rt<<|]);
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void Build(int l,int r,int rt){
lazy[rt]=sum[rt]=;
if(l==r){
a[rt]=b[l];
return;
}
int mid = (l+r)>>;
Build(l,mid,rt<<);
Build(mid+,r,rt<<|);
PushUp(rt);
}
void Update(int L,int R,int l,int r,int rt){
if(a[rt]>&&L<=l&&r<=R){
a[rt]--;
lazy[rt]++;
return;
}
if(a[rt]==&&l==r){
sum[rt]++;
lazy[rt]=;
a[rt]=b[l];
return;
}
PushDown(rt);
int mid = (r+l)>>;
if(L<=mid) Update(L,R,l,mid,rt<<);
if(mid<R) Update(L,R,mid+,r,rt<<|);
PushUp(rt);
}
int Query(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R){
return sum[rt];
}
PushDown(rt);
int mid = (r+l)>>;
int ans=;
if(L<=mid) ans+=Query(L,R,l,mid,rt<<);
if(mid<R) ans+=Query(L,R,mid+,r,rt<<|);
PushUp(rt);
return ans;
}
int main() {
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
int q,x,y;
char op[];
while(scanf("%d%d",&n,&q)!=EOF) {
for(int i=; i<=n; i++)
scanf("%d",&b[i]);
Build(,n,);
for(int i=; i<q; i++) {
scanf("%s%d%d",op,&x,&y);
if(op[]=='a')
Update(x,y,,n,);
else
printf("%d\n",Query(x,y,,n,));
}
}
return ;
}

HDU - 6315(2018 Multi-University Training Contest 2) Naive Operations (线段树区间操作)的更多相关文章

  1. HDU 6315 Naive Operations(线段树区间整除区间)

    Problem DescriptionIn a galaxy far, far away, there are two integer sequence a and b of length n.b i ...

  2. HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)

    http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...

  3. 杭电多校第二场 hdu 6315 Naive Operations 线段树变形

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  4. HDU-DuoXiao第二场hdu 6315 Naive Operations 线段树

    hdu 6315 题意:对于一个数列a,初始为0,每个a[ i ]对应一个b[i],只有在这个数字上加了b[i]次后,a[i]才会+1. 有q次操作,一种是个区间加1,一种是查询a的区间和. 思路:线 ...

  5. HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  6. HDU - 6315 Naive Operations (线段树+思维) 2018 Multi-University Training Contest 2

    题意:数量为N的序列a和b,a初始全为0,b为给定的1-N的排列.有两种操作:1.将a序列区间[L,R]中的数全部+1:2.查询区间[L,R]中的 ∑⌊ai/bi⌋(向下取整) 分析:对于一个位置i, ...

  7. HDU 6315 Naive Operations(线段树+复杂度均摊)

    发现每次区间加只能加1,最多全局加\(n\)次,这样的话,最后的答案是调和级数为\(nlogn\),我们每当答案加1的时候就单点加,最多加\(nlogn\)次,复杂度可以得当保证. 然后问题就是怎么判 ...

  8. hdu Naive Operations 线段树

    题目大意 题目链接Naive Operations 题目大意: 区间加1(在a数组中) 区间求ai/bi的和 ai初值全部为0,bi给出,且为n的排列,多组数据(<=5),n,q<=1e5 ...

  9. 线段树 + 区间更新: HDU 4893 Wow! Such Sequence!

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

随机推荐

  1. haar的简单应用(1)

    又双叒叕出现问题了,还是重置系统的原因,弄半天终于弄好了,就不说这个了 直接记录一下该做的 如下教程中的文件我倒是都找到了(但是这些文件在目前的代码中都用不到..) 在这里 令我无语的他只用了一个.x ...

  2. Linux 内存清理

    1. Clear PageCache only.sync && echo 1 > /proc/sys/vm/drop_caches2. Clear dentries and in ...

  3. Linux 遍历目录下面所有文件,将目录名、文件名转为小写

    当你从 Windows 服务器换到 Linux 服务器的时候,以前的上传目录的目录名.文件名会遇到大小写的问题.在 Windows 环境下面没有文件区分大小写的概念,而 Linux 却有严格的文件名大 ...

  4. js多回调函数

    多回调问题 前端编程时,大多通过接口交换数据,接口调用都是异步的,处理数据都是在回调函数里. 假如需要为一个用户建立档案,需要准备以下数据,然后调用建档接口 name     // 用户名字 使用接口 ...

  5. bzoj4481非诚勿扰(期望dp)

    有n个女性和n个男性.每个女性的如意郎君列表都是所有男性的一个子集,并且可能为空.如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象.将“如意郎君列表”中的男性按照编号从小到大的顺序呈现给她 ...

  6. JSON字符串 与 JSON对象 互转

    一,JSON字符串与JSON对象的区别 JSON对象是符合JSON格式的对象,可以用"对象.属性"进行存取值; JSON字符串是符合JSON格式的字符串; 二,JSON字符串-&g ...

  7. JS时间戳转换成时间格式

    TimeNow: function (val) { var date = new Date(val); var Y = date.getFullYear(); var m = date.getMont ...

  8. luogu3731 新型城市化

    题目链接 思路 这道题对于题意的转化很关键. 题目要求的是添上一条边,使得图中最大团的大小变大.给出的边是原图的补集,这就给我们了提示. 因为题目中说,原图中最多有两个团.所以给出的边一定形成了一个二 ...

  9. 关于form与表单操作

    form表单自动提交规则 form表单中只有一个type=text的input,在input中按enter键,会自动提交: form表单中有多个type=text的input,且无type=submi ...

  10. 将Excel导出为SQL语句

    需求说明:公司做项目前进行需求分析,确定表结构后需要建表,如果照着表格去敲,那就太麻烦了,所以想到了自动生成SQL语句. 思路大概就是:解析Excel,拼接SQL语句,输出SQL文件. 第三方jar包 ...