BZOJ 3343:教主的魔法(分块)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3343
【题目大意】
给出一个数列,有区间加法操作,询问区间大于等于c的数字个数
【题解】
我们将数据分块,区间加法等价于各个块整块加法以及首位部分的个体加法,
由于要查询区间大于等于c的数字个数,
因此我们在每个块发生相对大小变动的时候对块内元素映射进行一次排序,
因为每次只有最左和最右的块相对大小发生变动,因此修改操作仍为O(sqrt(n))
查询时我们二分查找每个块中满足大小的个数,查询复杂度O(sqrt(n)log(sqrt(n)))
总复杂度O(qsqrt(n)log(sqrt(n))。
【代码】
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int n,m,q,block;
const int N=1000010;
int a[N],b[N],pos[N],add[N];
void Sortblock(int x){
int l=(x-1)*block+1,r=min(x*block,n);
for(int i=l;i<=r;i++)b[i]=a[i];
sort(b+l,b+r+1);
}
int find(int x,int v){
int l=(x-1)*block+1,r=min(x*block,n);
int R=r;
while(l<=r){
int mid=(l+r)>>1;
if(b[mid]<v)l=mid+1;
else r=mid-1;
}return R-l+1;
}
void update(int x,int y,int v){
if(pos[x]==pos[y]){for(int i=x;i<=y;i++)a[i]+=v;}
else{
for(int i=x;i<=pos[x]*block;i++)a[i]+=v;
for(int i=(pos[y]-1)*block+1;i<=y;i++)a[i]+=v;
}Sortblock(pos[x]);Sortblock(pos[y]);
for(int i=pos[x]+1;i<pos[y];i++)add[i]+=v;
}
int query(int x,int y,int v){
int res=0;
if(pos[x]==pos[y]){for(int i=x;i<=y;i++)if(a[i]+add[pos[i]]>=v)res++;}
else{
for(int i=x;i<=pos[x]*block;i++)if(a[i]+add[pos[i]]>=v)res++;
for(int i=(pos[y]-1)*block+1;i<=y;i++)if(a[i]+add[pos[i]]>=v)res++;
}for(int i=pos[x]+1;i<pos[y];i++)res+=find(i,v-add[i]);
return res;
}
int main(){
while(~scanf("%d%d",&n,&q)){
block=int(sqrt(n));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
pos[i]=(i-1)/block+1;
b[i]=a[i];
}
if(n%block)m=n/block+1;
else m=n/block;
for(int i=1;i<=m;i++)Sortblock(i);
for(int i=1;i<=q;i++){
char op[5];
int x,y,v;
scanf("%s%d%d%d",op,&x,&y,&v);
if(op[0]=='M')update(x,y,v);
else printf("%d\n",query(x,y,v));
}
}return 0;
}
BZOJ 3343:教主的魔法(分块)的更多相关文章
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- Bzoj 3343: 教主的魔法 分块,二分
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 821 Solved: 364[Submit][Status][Discuss ...
- bzoj 3343 教主的魔法 分块
修改直接对整块打标记,两边暴力. 查询需要保证每个整块有序,所以在修改时排序就好啦 #include<cstdio> #include<cstring> #include< ...
- BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- BZOJ 3343教主的魔法
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- bzoj 3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 924 Solved: 402[Submit][Status][Discuss] Descriptio ...
- BZOJ 3343 教主的魔法(分块)
题意: 有一个1e6的数组,t次操作:将[l,r]内的值增加w,或者查询[l,r]内的值大于等于add的 思路: 分块,块大小为sqrt(n),每次只需要暴力头尾两块,中间的整块打标记, 对于查询查操 ...
- [bzoj] 3343 教主的魔法 || 带修改分块
原题 长度为n的序列,有两种操作: 1.[l,r]区间每个数+w 2.询问[l,r]区间有多少个数>c 记录lazy数组即可. #include<cstdio> #include&l ...
随机推荐
- Shuffle Cards(牛客第三场+splay)
题目: 题意:将1~n的数进行m次操作,每次操作将第pi位到pi+si-1位的数字移到第一位,求最后的排列. 思路:现在还没不会写splay,在知道这是splay模板题后找了一波别人的模板,虽然过了, ...
- Codeforces Round #484 (Div. 2)
题目链接:http://codeforces.com/contest/982 A. Row time limit per test:1 second memory limit per test:256 ...
- beego 相关
bee api bapi bee run -downdoc=true -docgen=true
- C基础 一个可以改变linux的函数getch
引言 - getch简述 引用老的TC版本getch说明. (文章介绍点有点窄, 应用点都是一些恐龙游戏时代的开发细节) #include <conio.h> /* * 立即从客户端 ...
- signal, sigaction,信号集合操作
信号是与一定的进程相联系的,而建立其信号和进程的对应关系,这就是信号的安装登记. Linux主要有两个函数实现信号的安装登记:signal和sigaction.其中signal在系统调用的基础上实现, ...
- Rsync文件同步服务
Rsync简介 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具,适用于Unix/Linux/Windows等多种操作系统. Rsync的特性 支持拷贝特殊 ...
- intellij idea 无法创建类文件,方法。
- Django 项目CRM总结
0. 项目说明: 1. 销售自动分配客户资源: 给销售分配权重及承单数量,创建权重表,通过销售权重进行从大到小进行排序 以承单数循环添加到列表,承单数是多少列表添加就添加多少次 考虑到如果服务重启,或 ...
- 微信小程序-ios系统-下拉上拉出现白色,如何处理呢?
这几天做小程序,有些页面都是全屏的背景,在安卓上背景是固定的,而在ios上上拉下拉出现白色,测试说体验不太好,一开始我以为是下拉上拉刷新造成的,关闭了依然是这样.为了体验好点,可以按一下解决: 方式一 ...
- kubernetes如何要使用用户名和密码登陆harbor以拉取docker镜像,应该如何操作?
还好,网上有相应的CASE处理. http://www.jianshu.com/p/ffbfb44dc496 =========================== 先生成名为为regsecret的S ...