【题解】

  分块。块内排序。块内二分出第一个大于等于c的数。

  

#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 500010
#define rg register
using namespace std;
int n,m,opt,l,r,c,block,bl[N],tag[N];
struct rec{
int data,pos;
}a[N];
inline int read(){
int k=0,f=1; char c=getchar();
while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
inline bool cmp(rec x,rec y){return x.data<y.data;}
inline int find(int pos,int x){
int l=(pos-1)*block+1,r=pos*block, ll=l;
while(l<r){
int mid=(l+r+1)>>1;
if(a[mid].data<x) l=mid;
else r=mid-1;
}
if(a[l].data>=x) return 0;
return l-ll+1;
}
int main(){
n=read(); block=sqrt(n);
for(rg int i=1;i<=n;i++) a[i].data=read(),a[i].pos=i;
for(rg int i=1;i<=n;i++) bl[i]=(i-1)/block+1;
for(rg int i=1;i<=block+1;i++) sort(a+(i-1)*block+1,a+min(i*block,n)+1,cmp);
for(rg int j=1;j<=n;j++){
if((opt=read())==0){
l=read(); r=read(); c=read();
int st=bl[l]+1,ed=bl[r]-1;
for(rg int i=st;i<=ed;i++) tag[i]+=c;
if(bl[l]==bl[r]){
int x=(bl[l]-1)*block+1,y=min(bl[l]*block,n);
for(rg int i=x;i<=y;i++) if(a[i].pos>=l&&a[i].pos<=r) a[i].data+=c;
sort(a+x,a+y+1,cmp);
continue;
}
int x=(bl[l]-1)*block+1,y=min(bl[l]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos>=l) a[i].data+=c;
sort(a+x,a+y+1,cmp);
x=(bl[r]-1)*block+1,y=min(bl[r]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos<=r) a[i].data+=c;
sort(a+x,a+y+1,cmp);
}
else{
l=read(); r=read(); c=read(); c*=c;
int st=bl[l]+1,ed=bl[r]-1,ans=0;
for(rg int i=st;i<=ed;i++) ans+=find(i,c-tag[i]);
if(bl[l]==bl[r]){
for(rg int i=(bl[l]-1)*block+1;i<=bl[l]*block;i++)
if(a[i].pos>=l&&a[i].pos<=r&&a[i].data+tag[bl[l]]<c) ans++;
printf("%d\n",ans); continue;
}
int x=(bl[l]-1)*block+1,y=min(bl[l]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos>=l&&a[i].data+tag[bl[l]]<c) ans++;
x=(bl[r]-1)*block+1,y=min(bl[r]*block,n);
for(rg int i=x;i<=y;i++)
if(a[i].pos<=r&&a[i].data+tag[bl[r]]<c) ans++;
printf("%d\n",ans);
}
}
return 0;
}

  

LOJ 6278 数列分块入门2的更多相关文章

  1. LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)

    #6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6   题目描述 给出 ...

  2. LOJ#6278. 数列分块入门 2

    在一个区间上进行操作,一种操作是某个小区间都加上c,另一个查找这个区间内大于c*c的数 我们可以另外开一个数组在保存a中的每个分块内的相对值,然后每次对a加值,并把a的值赋给b,不同的是b内的各个分块 ...

  3. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  4. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)

    #6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给 ...

  5. LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)

    #6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  6. LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)

    #6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  7. LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)

    #6282. 数列分块入门 6 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 1   题目描述 给出 ...

  8. LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)

    #6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5   题目描述 给出 ...

  9. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论   题目描述 给出一个 ...

随机推荐

  1. 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...

  2. Generic Interfaces (C# Programming Guide)

    https://msdn.microsoft.com/en-us/library/kwtft8ak(v=vs.140).aspx It is often useful to define interf ...

  3. VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入

    vs2010的用法和vc6有很大的不同,特别是在一些函数调用那里,当然.控件导入也是很不一样的 安装好控件后就可以在工程里加入teechart控件了 加入方法有如下几种: 1.添加Teechart控件 ...

  4. Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路

    Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路 Doug Cutting,凭借自己对工作的热情和脚踏实地的态度,开创了Lucene和Nutch两个成功的开源搜索引擎项目 ...

  5. P1606 [USACO07FEB]白银莲花池Lilypad Pond

    这个题其实算是个最短路计数,建图的直观思想很简单,但是很显然有一个地方没法处理,就是有的时候通过两条路走到同一个地方的话方案数会计算两次.我们发现加上原有的莲花就很难处理,会计算重复.我们要想办法避免 ...

  6. Kconfig详解-文件的基本要素 ***

    当执行make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会 ...

  7. 03_jni_helloworld_完成

    通过ndk-build编译C的代码.cd /d就是直接进到我的目录里面. 打开ANDROID-MK.HTML Introduction: This document describes the syn ...

  8. “国家队爷”杯液体战争AI比赛!!__SymenYang

    原帖 这两天一直在搞这个AI,提供的样例更本不是我的风格啊,看不懂更不会改... 所以我自己写了一个AI的平台,现在在不断的修改AI的策略,smart样例还是很容易过的,让line的行走速度变慢一点到 ...

  9. [转]Linux rpm 命令参数使用详解

    转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html RPM是RedHat Package Mana ...

  10. mybatis中打印sql语句

    在mybatis-config.xml中properties节点下,配置一个settings节点 <settings> <setting name="cacheEnable ...