bzoj 3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 924 Solved: 402
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
Sample Output
3
HINT
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
typedef long long LL;
const int maxn=;
int N,Q,M,block;
int a[maxn],b[maxn],pos[maxn],add[maxn];
char s[];
inline void reset(int x){
int l=(x-)*block+,r=min(N,x*block);
for(int i=l;i<=r;i++) b[i]=a[i];
sort(b+l,b+r+);
}
inline void update(int l,int r,int delta){
if(pos[l]==pos[r]){
for(int i=l;i<=r;i++) a[i]+=delta;
}
else{
for(int i=l;i<=pos[l]*block;i++) a[i]+=delta;
for(int i=(pos[r]-)*block+;i<=r;i++) a[i]+=delta;
}
reset(pos[l]); reset(pos[r]);
for(int i=pos[l]+;i<=pos[r]-;i++) add[i]+=delta;
}
inline int find(int l,int r,int v){
if(l+>=r){
if(b[l]>=v) return l;
else return r;
}
int mid=(l+r)>>;
if(b[mid]>=v) return find(l,mid,v);
else return find(mid+,r,v);
}
inline int query(int l,int r,int z){
int sum=;
if(pos[l]==pos[r]){
for(int i=l;i<=r;i++)
if(a[i]+add[pos[i]]>=z) sum++;
}
else{
for(int i=l;i<=pos[l]*block;i++)
if(a[i]+add[pos[i]]>=z) sum++;
for(int i=(pos[r]-)*block+;i<=r;i++)
if(a[i]+add[pos[i]]>=z) sum++;
}
for(int i=pos[l]+;i<=pos[r]-;i++){
sum+=(i*block+)-find((i-)*block+,i*block+,z-add[i]);
}
return sum;
}
int main(){
scanf("%d%d",&N,&Q);
block=int(sqrt(N));
for(int i=;i<=N;i++){
scanf("%d",&a[i]); b[i]=a[i];
pos[i]=(i-)/block+;
}
if(N%block!=) M=N/block+;
else M=N/block;
for(int i=;i<=M;i++) reset(i);
while(Q--){
int x,y,z;
scanf("%s%d%d%d",s,&x,&y,&z);
if(s[]=='M') update(x,y,z);
else printf("%d\n",query(x,y,z));
}
return ;
}
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 MBSubmit: 821 Solved: 364[Submit][Status][Discuss ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- 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 教主的魔法 分块
修改直接对整块打标记,两边暴力. 查询需要保证每个整块有序,所以在修改时排序就好啦 #include<cstdio> #include<cstring> #include< ...
- [bzoj] 3343 教主的魔法 || 带修改分块
原题 长度为n的序列,有两种操作: 1.[l,r]区间每个数+w 2.询问[l,r]区间有多少个数>c 记录lazy数组即可. #include<cstdio> #include&l ...
- 块状链表 bzoj 3343教主的魔法
//块状链表//分块排序,然后每次查找时在暴力查找头和尾两个块.//中间那些块,因为有序所以只需2分查找即可.我用的是lower_pound();//插入是,也是头和尾暴力插入,中间那些加到一个累计里 ...
随机推荐
- prometheus and collectd and docker
sudo docker run --name prometheus -d -v /data/prometheusdata/prometheus.yml:/etc/prometheus/prometh ...
- 涉及不同实例不同数据库的同一条sql语句
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Querie ...
- [python+opencv] ROI(Range Of Interest)与泛洪填充
python+opencv3.3视频教学 基础入门笔记(贾志刚老师) https://www.bilibili.com/video/av24998616/?p=8 ROI(Range Of Inter ...
- os模块学习+open行数
os模块的使用https://www.cnblogs.com/juandx/p/4962089.html 注意:新建和关闭文件,可以直接用,无需os模块 python中对文件.文件夹(文件操作函数)的 ...
- idong常用js总结
1.判断屏幕高度 $(document).ready(function() { $("#left").height($(window).height()); $(&qu ...
- HTML PX/EM换算工具 快捷键
换算工具:http://www.runoob.com/tags/ref-pxtoemconversion.html 快捷键:http://www.runoob.com/tags/html-keyboa ...
- Git warning:LF will be replaced by CRLF in readme.txt的原因与解决方案
今天用Git bash遇到的问题,看了几个回答之后发现一个比较有价值的,给大家分享一下,其他很多的回答都有很或多或少存在一些弊端. 原回答地址在stackoverflow上,附上链接--http:// ...
- spring security积累
使用数据库管理用户权限: Spring Security默认情况下需要两张表,用户表和权限表 create table users( username varchar_ignorecase(50) n ...
- 0627-File-163
print('创建一个文件向其中写入信息,再读取出写入的信息-------------------------------------') f = open('E:\\foo4.txt','w+') ...
- c#实现图片二值化例子(黑白效果)
C#将图片2值化示例代码,原图及二值化后的图片如下: 原图: 二值化后的图像: 实现代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...