题解:非常高妙的分块,每个块对应一个桶,桶内元素全部sort过,加值时,对于零散块O(sqrt(n))暴力修改,然后暴力重构桶.对于大块直接整块加.查询时对于非完整块O(sqrt(n))暴力遍历.对于完整的大块用lower_bound或者手写二分log(sqrt(n)查找,总复杂度O(n*sqrt(n)*log(sqrt(n)))

代码如下:

#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int a[],lump[],tag[];
int n,sz;
vector<int> v[]; void reset(int x)
{
v[x].clear();
for(int i=(x-)*sz+;i<=min(x*sz,n);i++)
{
v[x].push_back(a[i]);
}
sort(v[x].begin(),v[x].end());
} void add(int l,int r,int c)
{
for(int i=l;i<=min(lump[l]*sz,r);i++)
{
a[i]+=c;
}
reset(lump[l]);
if(lump[l]!=lump[r])
{
for(int i=(lump[r]-)*sz+;i<=r;i++)
{
a[i]+=c;
}
reset(lump[r]);
}
for(int i=lump[l]+;i<=lump[r]-;i++)
{
tag[i]+=c;
}
} int query(int l,int r,int c)
{
int ans=;
for(int i=l;i<=min(lump[l]*sz,r);i++)
{
if(a[i]+tag[lump[l]]<c)
{
ans++;
}
}
if(lump[l]!=lump[r])
{
for(int i=(lump[r]-)*sz+;i<=r;i++)
{
if(a[i]+tag[lump[r]]<c)
{
ans++;
}
}
}
for(int i=lump[l]+;i<=lump[r]-;i++)
{
int z=c-tag[i];
ans+=lower_bound(v[i].begin(),v[i].end(),z)-v[i].begin();
}
return ans;
} int main()
{
int opt,l,r,c;
scanf("%d",&n);
sz=sqrt(n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=;i<=n;i++)
{
lump[i]=(i-)/sz+;
v[lump[i]].push_back(a[i]);
}
for(int i=;i<=lump[n];i++)
{
sort(v[i].begin(),v[i].end());
}
for(int i=;i<=n;i++)
{
scanf("%d%d%d%d",&opt,&l,&r,&c);
if(!opt)
{
add(l,r,c);
}
else
{
printf("%d\n",query(l,r,c*c));
}
}
}

最新文章

  1. Storm ui 展示字段说明
  2. 天天动听MP3解码器性能提升50%
  3. Ural 1099 Work Scheduling
  4. javaScript 自定义事件、发布订阅设计模式
  5. VCRedist.exe静默安装方法(转)
  6. C#中泛型默认关键字(default)详解
  7. GCD之信号量机制一
  8. css设置黑体宋体等(转)
  9. php项目报错 Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg4, O_RDWR) f
  10. AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)
  11. Best Time to Buy and Sell Stock i
  12. Linux网络文件系统的实现与调试
  13. linux下nginx日常操作
  14. 【Spark调优】数据倾斜及排查
  15. JSAP106
  16. Ajax提交用FormData()上传文件
  17. CodeForces - 920C Swap Adjacent Elements
  18. [mysql]当mysql查询语句查询的结果为空时,返回query结果是什么类型的呢?
  19. jQuery 1.9/2.0/2.1及其以上 on 无效的解决办法
  20. [转]边框回归(Bounding Box Regression)详解

热门文章

  1. dirname 和 basename
  2. HDOJ5877(dfs序+离散化+树状数组)
  3. 【转】Jmeter安装 for windows
  4. java代码练习======每隔5行打印数字
  5. Linux下的Memcache安装,启动
  6. AngularJS:模型
  7. PHP ! 非运算符 与 if 判断深入研究
  8. JetBrains ReSharper Ultimate 2017.2.2激活方法
  9. DFT的补0运算
  10. 讲解一下this (作用域)