https://loj.ac/problem/6278

区间修改,查询区间第k大。

块内有序(另存),块内二分。

还是用vector吧,数组拷贝排序,下标搞不来。。

//Stay foolish,stay hungry,stay young,stay simple
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<cctype>
#include<vector>
using namespace std; const int MAXN=500005; vector<int> b[1000]; inline int read_d(){
int ret=0,f=1;char c;
while(c=getchar(),!isdigit(c)) f=c=='-'?-1:1;
while(isdigit(c)){
ret*=10;ret+=c-'0';
c=getchar();
}
return f*ret;
} int n; int a[MAXN],inc[MAXN],l[MAXN],
r[MAXN],bl[MAXN];
int block,num; void reset(int id){
b[id].clear();
for(int i=l[id];i<=r[id];i++) b[id].push_back(a[i]);
sort(b[id].begin(),b[id].end());
} void build(){
block=sqrt(n);
block>>=1;
num=n/block;
if(n%block) num++;
for(int i=1;i<=num;i++)
l[i]=(i-1)*block+1,
r[i]=i*block;
r[num]=n;
for(int i=1;i<=n;i++)
bl[i]=(i-1)/block+1;
for(int i=1;i<=num;i++) reset(i);
} void updata(int x,int y,int w){
if(bl[x]==bl[y]){
for(int i=x;i<=y;i++)
a[i]+=w;
reset(bl[x]);
return;
}
for(int i=x;i<=r[bl[x]];i++)
a[i]+=w;
reset(bl[x]);
for(int i=bl[x]+1;i<=bl[y]-1;i++)
inc[i]+=w;
for(int i=l[bl[y]];i<=y;i++)
a[i]+=w;
reset(bl[y]);
} int query(int x,int y,int w){
int ret=0;
if(bl[x]==bl[y]){
for(int i=x;i<=y;i++)
ret+=(a[i]+inc[bl[i]]<w);
return ret;
}
for(int i=x;i<=r[bl[x]];i++)
ret+=(a[i]+inc[bl[i]]<w);
for(int i=l[bl[y]];i<=y;i++)
ret+=(a[i]+inc[bl[i]]<w);
int flag=0;
for(int i=bl[x]+1;i<=bl[y]-1;i++){
int tar=w-inc[i];
ret+=lower_bound(b[i].begin(),b[i].end(),tar)-b[i].begin();
}
return ret;
} int main(){
n=read_d();
for(int i=1;i<=n;i++) a[i]=read_d();
build();
for(int i=1;i<=n;i++){
int q,x,y,z;
q=read_d();
x=read_d();
y=read_d();
z=read_d();
if(q==0) updata(x,y,z);
else printf("%d\n",query(x,y,z*z));
}
return 0;
}

最新文章

  1. JSTL标签库(一)核心标签库
  2. 使用JavaMail创建邮件发送邮件
  3. C# 接口笔记
  4. redis主从配置
  5. iOS版本比较方法
  6. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)
  7. BOM表生成
  8. BZOJ4006 [JLOI2015]管道连接
  9. Android项目----AsyncTask异步操作
  10. 查看JS object 结构
  11. grep工具及正则表达式
  12. 对把JDK源码的一些注解,笔记
  13. 一个小实例理解js 原型和继承
  14. metasploit渗透测试魔鬼训练营环境
  15. 在IWMS中的分页效果
  16. spring的IOC 的底层实现原理
  17. Python自动化开发 - 网络编程
  18. phantomjs waitFor
  19. 算法 - Catalan数 (卡特兰)
  20. [Javascript]XMLHttpRequest对象实现下载进度条

热门文章

  1. spring-data-redis 使用过程中踩过的坑
  2. 【CodeForces - 546C】Soldier and Cards (vector或队列)
  3. [USACO10MAR]伟大的奶牛聚集Great Cow Gat…【树形dp】By cellur925
  4. 分布式集群环境下,如何实现session共享二(项目开发)
  5. udp聊天交互
  6. loj125 除数函数求和 2
  7. 题解报告:hdu1231最大连续子序列
  8. Harris角点检测原理及实现
  9. 转 python 将一个文件中内容添加到另一个文件指定位置
  10. HDU 1423 LICS 模板