bzoj 3343 教主的魔法 分块
来源:互联网 发布:网络家教一对一辅导 编辑:程序博客网 时间:2024/05/17 00:00
修改直接对整块打标记,两边暴力。
查询需要保证每个整块有序,所以在修改时排序就好啦
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define N 1000005using namespace std;int n,m,nn,be[N],lazy[1005],ans;int a[N],b[N];void work(int x){int l=(x-1)*nn+1,r=min(n,x*nn);for(int i=l;i<=r;i++)b[i]=a[i];sort(b+l,b+r+1);}int main(){scanf("%d%d",&n,&m);nn=(int)sqrt(n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);be[i]=(i-1)/nn+1;}int tot=be[n];for(int i=1;i<=tot;i++)work(i);char ch; int l,r,c,num;while(m--){ch=getchar();while(ch!='A'&&ch!='M') ch=getchar();scanf("%d%d%d",&l,&r,&c);if(ch=='M'){if(be[l]==be[r]){for(int i=l;i<=r;i++) a[i]+=c;work(be[l]);continue;}for(int i=be[l]+1;i<be[r];i++) lazy[i]+=c;for(int i=l;i<=be[l]*nn;i++) a[i]+=c;for(int i=(be[r]-1)*nn+1;i<=r;i++) a[i]+=c;work(be[l]); work(be[r]);}else{int x; ans=0;if(be[l]==be[r]){for(int i=l;i<=r;i++)if(a[i]+lazy[be[i]]>=c)ans++;printf("%d\n",ans);continue;}for(int i=be[l]+1;i<be[r];i++){x=c-lazy[i];int L=(i-1)*nn+1,R=min(n,i*nn);num=lower_bound(b+L,b+R+1,x)-b;ans+=R-num+1;}for(int i=l;i<=be[l]*nn;i++)if(a[i]+lazy[be[i]]>=c)ans++;for(int i=(be[r]-1)*nn+1;i<=r;i++)if(a[i]+lazy[be[i]]>=c)ans++;printf("%d\n",ans);}}return 0;}
阅读全文
0 0
- BZOJ 3343 教主的魔法 分块
- BZOJ 3343: 教主的魔法|分块
- bzoj 3343: 教主的魔法 分块+二分
- BZOJ 3343: 教主的魔法 分块算法
- bzoj 3343 教主的魔法 分块
- 【BZOJ】3343 教主的魔法 分块
- BZOJ 3343 教主的魔法 分块
- [BZOJ] 3343 教主的魔法 分块
- [BZOJ]3343: 教主的魔法 分块+二分
- BZOJ 3343: 教主的魔法【分块基础题
- Bzoj 3343: 教主的魔法(分块+二分答案)
- BZOJ 3343 教主的魔法 暴力分块做法
- BZOJ 3343: 教主的魔法 分块大暴力
- 【BZOJ】【P3343】【教主的魔法】【题解】【分块】
- 分块-教主的魔法
- [BZOJ 3343]教主的魔法
- 【bzoj 3343】教主的魔法
- bzoj 3343: 教主的魔法
- Mac 下 终端停止和启动mysql服务 修改mysql的密码
- Android开发-文件复制粘贴
- android 酷欧天气完整项目
- iOS 网络高级编程一:越是基础越是高级
- HDU-1010 bfs+剪枝
- bzoj 3343 教主的魔法 分块
- 【八中】三角形划分平面区域(tripar.cpp)
- jquery,6位密码输入框效果
- Spark--01eclipse java spark环境搭建
- 使用Nexus搭建Maven私服
- JEESZ分布式架构平台介绍
- java时间处理,加减几天几月
- 包装类型及转换
- java递归算法小结