WA求救
查看原帖
WA求救
752094
MornHus楼主2023/3/7 19:07
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffffffffffff
bool space=0;
long long read(){
	long long x=0;
	int f=1;
	char c=getchar();
	while(c>'9'||c<'0'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+(c^'0');
		c=getchar();
	}
	if(c==' ')space=1;
	else space=0;
	return x*f;
}
ll tree[200001<<2];
ll lazy[200001<<2];
int n,m;
void pushup(ll &a,const ll &a1,const ll &a2){
	a=min(a1,a2);
}
void build(int x,int l,int r){
	if(l==r){
		tree[x]=read();
	}else{
		int mid=(l+r)>>1;
		build(x<<1,l,mid);
		build(x<<1|1,mid+1,r);
		pushup(tree[x],tree[x<<1],tree[x<<1|1]);
	}
}
void pushdown(int x,int l,int r){
	if(lazy[x]){
		int mid=(l+r)>>1;
		lazy[x<<1]=lazy[x];
		lazy[x<<1|1]=lazy[x];
		
		tree[x<<1]+=lazy[x];
		tree[x<<1|1]+=lazy[x];
		lazy[x]=0;
	}
}
void update(int x,int l,int r,int L,int R,ll val){
	if(L<=l&&r<=R){
		tree[x]+=val;
		lazy[x]+=val;
	}else{
		int mid=(l+r)>>1;
		pushdown(x,l,r);
		if(L<=mid)
			update(x<<1,l,mid,L,R,val);
		if(R>mid)
			update(x<<1|1,mid+1,r,L,R,val);
		pushup(tree[x],tree[x<<1],tree[x<<1|1]);
	}
}
ll query(int x,int l,int r,int L,int R){
	if(L<=l&&r<=R){
		return tree[x];
	}else{
		int mid=(l+r)>>1;
		pushdown(x,l,r);
		ll res=inf;
		if(L<=mid){
			pushup(res,res,query(x<<1,l,mid,L,R));
		}
		if(R>mid){
			pushup(res,res,query(x<<1|1,mid+1,r,L,R));
		}
		return res;
	}
}
int main(){
	n=read();
	build(1,1,n);
	m=read();
	int ls,rs;
	ll vv;
	for(int i=1;i<=m;i++){
		ls=read();
		rs=read();
		ls++;
		rs++;
		if(space){
			vv=read();
			if(ls>rs){
				update(1,1,n,ls,n,vv);
				update(1,1,n,1,rs,vv);
			}else{
				update(1,1,n,ls,rs,vv);
			}
		}else{
			if(ls>rs){
				printf("%lld\n",min(query(1,1,n,ls,n),query(1,1,n,1,rs)));
			}else{
				printf("%lld\n",query(1,1,n,ls,rs));
			}
		}
	}
	return 0;
}
2023/3/7 19:07
加载中...