WA on #2 我的输出有一个元素,但答案为零个元素.
代码如下:
#include<bits/stdc++.h>
//#pragma GCC optimize("Ofast")
//#define getchar getchar_unlocked
//#define putchar putchar_unlocked
#define int long long
using namespace std;
int f1;
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
if(ch=='\n'||ch=='\r')f1=1;
}
return x*f;
}
void print(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)print(x/10);
putchar(x%10+'0');
}
const int NMax=2e5;
int n,m;
int a[NMax+10];
struct Node{
int n,l,r,lz;
}t[2*NMax+10];
int ncnt;
void lzdown(int p){
if(!t[p].lz)return;
t[t[p].l].n+=t[p].lz;t[t[p].r].n+=t[p].lz;
t[t[p].l].lz+=t[p].lz;t[t[p].r].lz+=t[p].lz;
t[p].lz=0;
return;
}
int build(int L,int R){
int p=++ncnt;
if(L==R){
t[p].n=a[L];
return p;
}
int mid=(L+R)/2;
t[p].l=build(L,mid);t[p].r=build(mid+1,R);
t[p].n=min(t[t[p].l].n,t[t[p].r].n);
return p;
}
void modify(int p,int L,int R,int l,int r,int k){
if(l<=L&&R<=r){
t[p].lz+=k;
t[p].n+=k;
return;
}
lzdown(p);
int mid=(L+R)/2;
if(l<=mid)modify(t[p].l,L,mid,l,r,k);
if(r>mid)modify(t[p].r,mid+1,R,l,r,k);
t[p].n=min(t[t[p].l].n,t[t[p].r].n);
return;
}
int ask(int p,int L,int R,int l,int r){
if(l<=L&&R<=r)return t[p].n;
lzdown(p);
int mid=(L+R)/2,ans=INT_MAX;
if(l<=mid)ans=min(ans,ask(t[p].l,L,mid,l,r));
if(r>mid)ans=min(ans,ask(t[p].r,mid+1,R,l,r));
return ans;
}
signed main(){
n=read();
for(int i=0;i<n;i++){
a[i]=read();
}
build(0,n-1);
m=read();
while(m--){
int x=read(),y=read();
if(f1){
f1=0;
if(x<=y)print(ask(1,0,n-1,x,y));
else print(min(ask(1,0,n-1,0,y),ask(1,0,n-1,x,n-1)));
putchar('\n');
}
else{
int z=read();
if(x<=y)modify(1,0,n-1,x,y,z);
else{
modify(1,0,n-1,0,y,z);
modify(1,0,n-1,x,n-1,z);
}
}
}
return 0;
}
感谢!