I/O 问题,求助
查看原帖
I/O 问题,求助
289296
zymooll楼主2023/6/21 11:16

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;
}

感谢!

2023/6/21 11:16
加载中...