题目链接

  激动qwq。这是我A的第一道分块。

  分块之后对块内元素暴力sort。修改的时候对于整块打个标记,查询的时候只需要查C-tag就行了

  对于非整块,暴力修改,改完之后sort

  对于查询……非整块暴力查询,整块二分C-tag的位置就好啦

  

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#define maxn 1000010
#define sqtn 1200
using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Node{
int dat,id;
bool operator <(const Node a)const{
return dat<a.dat;
}
}; struct Block{
Node q[sqtn];
int tag,tot;
Block(){memset(q,,sizeof(q)); tag=tot=; }
}que[sqtn];
int d[maxn];
int s[maxn];
int w[maxn];
int le[sqtn],ri[sqtn]; void sorten(int x){
Block &o=que[x];
sort(o.q+,o.q+o.tot+);
for(int i=;i<=o.tot;++i){
w[o.q[i].id]=i;
}
} int main(){
int n=read(),m=read();
int sqt=sqrt(n),blo=;
for(int i=;i<=n;++i){
d[i]=read();
s[i]=(i-)/sqt+;
if(s[i]>blo) blo=s[i];
ri[s[i]]=i;
}
for(int i=n;i>=;--i){
le[s[i]]=i;
que[s[i]].q[++que[s[i]].tot]=(Node){d[i],i};
}
for(int i=;i<=blo;++i) sorten(i);
for(int i=;i<=m;++i){
char c[];int x,y,z;
scanf("%s%d%d%d",c,&x,&y,&z);
if(c[]=='M'){
int to=min(ri[s[x]],y);
for(int j=x;j<=to;++j) que[s[x]].q[w[j]].dat+=z;
sorten(s[x]);
if(s[x]==s[y]) continue;
int from=max(le[s[y]],x);
for(int j=from;j<=y;++j) que[s[y]].q[w[j]].dat+=z;
sorten(s[y]);
for(int j=s[x]+;j<s[y];++j) que[j].tag+=z;
}
else if(c[]=='A'){
int to=min(ri[s[x]],y),ans=;
for(int j=x;j<=to;++j)
if(que[s[x]].q[w[j]].dat>=z) ans++;
if(s[x]==s[y]){
printf("%d\n",ans);
continue;
}
int from=max(le[s[y]],x);
for(int j=from;j<=y;++j){
//printf("%d\n",que[s[y]].q[w[j]].dat);
if(que[s[y]].q[w[j]].dat>=z) ans++;
}
for(int j=s[x]+;j<s[y];++j){
Block now=que[j];
int l=,r=now.tot,lim=r+;
while(l<=r){
int mid=(l+r)>>;
if(now.q[mid].dat>=z-now.tag){
lim=mid;
r=mid-;
}
else l=mid+;
}
ans+=now.tot-lim+;
}
printf("%d\n",ans);
}
}
return ;
}
/*
5 3
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
*/

最新文章

  1. 闲扯淡json格式与对象
  2. [CLR via C#]25. 线程基础
  3. 清除行内元素之间HTML空白的几种解决方案
  4. 转Oracle字符集问题总结
  5. ORACLE RAC NTP 时间服务器配置
  6. 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误分析以及解决方案
  7. WPF中判断组合键
  8. STL源码剖析读书笔记之vector
  9. iOS基础 - Copy
  10. 使用 Flex 库项目---打包swc
  11. Echarts自定义tootips
  12. 【原】Java学习笔记024 - 包装类
  13. Shell命令-系统信息及显示之stat、du
  14. UI测试和GUI测试的区别
  15. PHP概率,抽奖
  16. 【数据库】SQL两表之间:根据一个表的字段更新另一个表的字段
  17. No cached version of ..... available for offline mode.
  18. 【poj1222-又一道开关问题】高斯消元求解异或方程组
  19. Java中sleep()与wait()的区别
  20. java和c通信相关的数据类型转换

热门文章

  1. BZOJ 3712: [PA2014]Fiolki 倍增+想法
  2. hdu 5093 Battle ships (二分图)
  3. SpringMVC-概述和入门程序
  4. PopClip:你会热爱的文本穿梭机
  5. Vue处理ajax请求
  6. c#和Java中的继承
  7. 伪基站SSRP
  8. iOS开发之蓝牙业务封装
  9. NOIP模拟赛 抓牛
  10. 【动态规划】51nod1780 完美序列