COJ 0995 WZJ的数据结构(负五)区间操作
| WZJ的数据结构(负五) |
| 难度级别:C; 运行时间限制:1000ms; 运行空间限制:262144KB; 代码长度限制:2000000B |
|
试题描述
|
|
请你设计一个数据结构,完成以下功能: 给定一个大小为N的整数组A,要求你回答执行M次操作。操作分两种: 操作1:每次操作给你l,r,v三个参数,求Al至Ar中值<=v的个数。 操作2:每次操作给你l,r,v三个参数,将Al至Ar中每个数的值+v。 |
|
输入
|
|
第一行为一个正整数N。
第二行为N个整数Ai。 第三行为一个正整数M。 接下来M行每行4个正整数t,l,r,v。若t=0表示操作1,t=1表示操作2。 |
|
输出
|
|
对每个操作1输出结果。
|
|
输入示例
|
|
10
1 2 1 1 2 1 1 2 2 1 4 0 1 10 2 0 1 10 1 1 3 5 1 0 1 10 1 |
|
输出示例
|
|
10
6 4 |
|
其他说明
|
|
1<=N<=200000
1<=M<=10000 1<=L<=R<=N 0<=Ai,v<=10^9 |
题解:分块,每一块sort,然后就没有然后了呢,注意二分。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,maxb=,inf=-1u>>;
int B[maxn],add[maxb],st[maxb],en[maxb],A[maxn],S[maxn],n,size,Q;
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') sig=-;ch=getchar();}
while(isdigit(ch)) x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<) putchar('-'),x=-x;
int len=,buf[];while(x) buf[len++]=x%,x/=;
for(int i=len-;i>=;i--) putchar(buf[i]+'');return;
}
int ans,cv;
void query(int L,int R){for(int i=L;i<=R;i++)if(S[i]+add[B[i]]<=cv)ans++;return;}
void queryb(int ql,int qr){
//printf("%d %d\n",ql,qr);
int M,s,L,R;
for(int b=ql;b<=qr;b++){
if(A[st[b]]+add[b]>cv) continue;
s=st[b];L=st[b];R=en[b]+;
while(L+<R){
//printf("%d %d\n",L,R);
M=L+R>>;
if(A[M]+add[b]<=cv) L=M;
else R=M;
}
ans+=L-s+;
} return;
}
void addt(int L,int R){for(int i=L;i<=R;i++)S[i]+=cv;for(int i=st[B[L]];i<=en[B[L]];i++)A[i]=S[i];sort(A+st[B[L]],A+en[B[L]]+);return;}
void addb(int L,int R){for(int b=L;b<=R;b++)add[b]+=cv;return;}
void init(){
n=read();int cnt=;size=(int)sqrt(1.1*n);
B[]=;
for(int i=;i<=n;i++){
S[i]=A[i]=read();
if(++cnt==size) B[i]=B[i-]+,cnt=;
else B[i]=B[i-];
if(!st[B[i]]) st[B[i]]=i;
en[B[i]]=i;
//printf("%d ",B[i]);
}//puts("");
Q=read();
for(int b=;b<=B[n];b++)sort(A+st[b],A+en[b]+);
return;
}
void work(){
int tp,ql,qr;
while(Q--){
tp=read();ql=read();qr=read();cv=read();
//printf("%d %d %d %d\n",tp,ql,qr,cv);
if(!tp){
ans=;
if(B[ql]==B[qr]) query(ql,qr);
else queryb(B[ql]+,B[qr]-),query(ql,en[B[ql]]),query(st[B[qr]],qr);
write(ans);ENT;
}
else{
if(B[ql]==B[qr]) addt(ql,qr);
else addb(B[ql]+,B[qr]-),addt(ql,en[B[ql]]),addt(st[B[qr]],qr);
}
}
return;
}
void print(){
return;
}
int main(){
init();work();print();return ;
}
COJ 0995 WZJ的数据结构(负五)区间操作的更多相关文章
- COJ 0967 WZJ的数据结构(负三十三)
WZJ的数据结构(负三十三) 难度级别:E: 运行时间限制:7000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大 ...
- COJ 0970 WZJ的数据结构(负三十)树分治
WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...
- COJ 0990 WZJ的数据结构(负十)
WZJ的数据结构(负十) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给你一个N个节点的有根树,从1到N编号,根节点为1并给 ...
- COJ 0999 WZJ的数据结构(负一)
WZJ的数据结构(负一) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 输入N个模板串Pi和文本串T,输出每个模板串Pi在T ...
- COJ 0979 WZJ的数据结构(负二十一)
WZJ的数据结构(负二十一) 难度级别:C: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你实现一个数据结构,完成这样的功能: 给你一个 ...
- COJ 0981 WZJ的数据结构(负十九)树综合
WZJ的数据结构(负十九) 难度级别:E: 运行时间限制:3500ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ的数据结构中有很多都是关于树的.这让很多练习 ...
- COJ 1010 WZJ的数据结构(十) 线段树区间操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1001 WZJ的数据结构(十) 难度级别:D: 运行时间限制:3000ms: ...
- COJ 0349 WZJ的旅行(五)
WZJ的旅行(五) 难度级别:E: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ又要去旅行了T^T=0.幻想国由N个城市组成,由于道 ...
- COJ 1008 WZJ的数据结构(八) 树上操作
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...
随机推荐
- Android学习中R文件中途消失
新建工程的时候R文件明明是在的,结果等我做着做着,R.java不见了????于是我就上网查了查,发现,诶,大家都说的几种常见情况都试过了,1.对工程clean一下,选project->clean ...
- HDU1007 Quoit Design 【分治】
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 一个Nodejs的简单计算測试程序
測试目的: 1 測试二维数组的使用 2 输出函数的使用 代码: var util = require('util'); a = 3; b = 4; c = a + b; a = []; for(i = ...
- python集合set,frozenset--笔记
<Python3程序开发指南>笔记. python提供了2种内置的集合类型:可变的set类型.固定的frozenset类型. 只有可哈希运算的对象可添加到集合中.可哈希的数据类型:floa ...
- java RSA签名
try{ //1初始化秘钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); key ...
- MongoDB与PHP的添加、修改、查询、删除
链接数据库使用下面的代码创建一个数据库链接 <?php$connection = new Mongo(); //链接到 localhost:27017$connection = new Mong ...
- csms发布步骤
1.wcf发布 通过点击 CSMS2.Application,右键发布按钮,将文件拷贝 2.打包文件 CSMS2.Resources 中 update.config 修改为对应 ServerUrl地址 ...
- ssh key报but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!错误
在/etc/hosts 文件加上对方的主机名 ip地址,可以ping通主机名即可.
- DELL R410升级网卡驱动
官方链接http://zh-cn.broadcom.com/support/ethernet_nic/netxtremeii.php(官方驱动的名字偶尔会改) 注意确保服务器的kernel-dev ...
- 2013多校联合2 I Warm up 2(hdu 4619)
Warm up 2 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...