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的数据结构(负五)区间操作的更多相关文章

  1. COJ 0967 WZJ的数据结构(负三十三)

    WZJ的数据结构(负三十三) 难度级别:E: 运行时间限制:7000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大 ...

  2. COJ 0970 WZJ的数据结构(负三十)树分治

    WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...

  3. COJ 0990 WZJ的数据结构(负十)

    WZJ的数据结构(负十) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给你一个N个节点的有根树,从1到N编号,根节点为1并给 ...

  4. COJ 0999 WZJ的数据结构(负一)

    WZJ的数据结构(负一) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 输入N个模板串Pi和文本串T,输出每个模板串Pi在T ...

  5. COJ 0979 WZJ的数据结构(负二十一)

    WZJ的数据结构(负二十一) 难度级别:C: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你实现一个数据结构,完成这样的功能: 给你一个 ...

  6. COJ 0981 WZJ的数据结构(负十九)树综合

    WZJ的数据结构(负十九) 难度级别:E: 运行时间限制:3500ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ的数据结构中有很多都是关于树的.这让很多练习 ...

  7. COJ 1010 WZJ的数据结构(十) 线段树区间操作

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1001 WZJ的数据结构(十) 难度级别:D: 运行时间限制:3000ms: ...

  8. COJ 0349 WZJ的旅行(五)

    WZJ的旅行(五) 难度级别:E: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ又要去旅行了T^T=0.幻想国由N个城市组成,由于道 ...

  9. COJ 1008 WZJ的数据结构(八) 树上操作

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...

随机推荐

  1. Android学习中R文件中途消失

    新建工程的时候R文件明明是在的,结果等我做着做着,R.java不见了????于是我就上网查了查,发现,诶,大家都说的几种常见情况都试过了,1.对工程clean一下,选project->clean ...

  2. HDU1007 Quoit Design 【分治】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. 一个Nodejs的简单计算測试程序

    測试目的: 1 測试二维数组的使用 2 输出函数的使用 代码: var util = require('util'); a = 3; b = 4; c = a + b; a = []; for(i = ...

  4. python集合set,frozenset--笔记

    <Python3程序开发指南>笔记. python提供了2种内置的集合类型:可变的set类型.固定的frozenset类型. 只有可哈希运算的对象可添加到集合中.可哈希的数据类型:floa ...

  5. java RSA签名

    try{ //1初始化秘钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); key ...

  6. MongoDB与PHP的添加、修改、查询、删除

    链接数据库使用下面的代码创建一个数据库链接 <?php$connection = new Mongo(); //链接到 localhost:27017$connection = new Mong ...

  7. csms发布步骤

    1.wcf发布 通过点击 CSMS2.Application,右键发布按钮,将文件拷贝 2.打包文件 CSMS2.Resources 中 update.config 修改为对应 ServerUrl地址 ...

  8. ssh key报but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!错误

    在/etc/hosts 文件加上对方的主机名  ip地址,可以ping通主机名即可.

  9. DELL R410升级网卡驱动

    官方链接http://zh-cn.broadcom.com/support/ethernet_nic/netxtremeii.php(官方驱动的名字偶尔会改)   注意确保服务器的kernel-dev ...

  10. 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 ...