社区讨论
关于此题分块写法
P2880[USACO07JAN] Balanced Lineup G参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @loy43s9j
- 此快照首次捕获于
- 2023/11/14 17:09 2 年前
- 此快照最后确认于
- 2023/11/14 18:49 2 年前
如果这道题还有区间修改,分块是不是这么写
CPP#include<bits/stdc++.h>//区间修改+区间查询最值
using namespace std;
#define re register
const int N=5e4+10,K=250,INF=0x3f3f3f3f;
struct node{
int l,r;
int maxx,minn;
int lazy;
}kuai[K];
int n,q,cnt,len,a[N],cop[N],loc[N];
inline int read(){
int f=0,fu=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')fu=-1;c=getchar();}
while(c>='0'&&c<='9'){f=(f<<3)+(f<<1)+c-48;c=getchar();}
return f*fu;
}
inline void write(int x){
if(x<0)x=(x^-1)+1,putchar('-');
if(x>9)write(x/10);
putchar(x%10+'0');
}
inline void reset(int x){
for(re int i=kuai[x].l;i<=kuai[x].r;i=-~i){
a[i]+=kuai[x].lazy;
cop[i]=a[i];
}
kuai[x].lazy=0;
stable_sort(cop+kuai[x].l,cop+kuai[x].r+1);
kuai[x].maxx=cop[kuai[x].r];
kuai[x].minn=cop[kuai[x].l];
}
inline void update(int l,int r,int k){
int st=loc[l],en=loc[r];
for(re int i=l;i<=min(r,kuai[st].r);i=-~i)a[i]+=k;
reset(st);
if(st!=en){
for(re int i=kuai[en].l;i<=r;i=-~i)a[i]+=k;
reset(en);
for(re int i=st+1;i<en;i=-~i)kuai[i].lazy+=k;
}
}
inline int query(int l,int r){
int st=loc[l],en=loc[r],maxx=-INF,minn=INF;
for(re int i=l;i<=min(r,kuai[st].r);i=-~i){
maxx=max(maxx,a[i]+kuai[st].lazy);
minn=min(minn,a[i]+kuai[st].lazy);
}
if(st!=en){
for(re int i=kuai[en].l;i<=r;i=-~i){
maxx=max(maxx,a[i]+kuai[en].lazy);
minn=min(minn,a[i]+kuai[en].lazy);
}
for(re int i=st+1;i<en;i=-~i){
maxx=max(maxx,kuai[i].maxx);
minn=min(minn,kuai[i].minn);
}
}
return maxx-minn;
}
int main(){
n=read(),q=read();len=sqrt(n);
for(re int i=1;i<=n;i=-~i){
a[i]=read();
if(i%len==1){
kuai[++cnt].l=i;
kuai[cnt].minn=INF;
kuai[cnt].maxx=-INF;
}
loc[i]=cnt;
kuai[cnt].r=i;
kuai[cnt].maxx=max(kuai[cnt].maxx,a[i]);
kuai[cnt].minn=min(a[i],kuai[cnt].minn);
cop[i]=a[i];
}
for(re int i=1;i<=cnt;i=-~i)reset(i); int l,r,k,op;
while(q--){
op=read(),l=read(),r=read(),k=read();
if(op==1)update(l,r,k);
else write(query(l,r)),puts("");
}
return 0;
}//板子
回复
共 0 条回复,欢迎继续交流。
正在加载回复...