0分全部RE
查看原帖
0分全部RE
1120016
wuyuxuan12345678楼主2024/3/25 19:34

借鉴了一下题解,样例全能过,但交上去全部RE

#include<bits/stdc++.h>
using namespace std;
#define maxn 200010
long long tot,n,q;
long long a[maxn],num[maxn],sum[maxn],z[maxn];
inline long long init(){
	tot=0;
	for(register long long i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		z[i]=z[i-1];
		if(a[i]>0){
			num[++tot]=i;
			z[i]++;
		}
	}
}
inline long long solve(){
	for(register long long i=tot;i>0;i--){
		long long cnt=0;
		for(register long long j=num[i];j>0&&(a[j]<=0||j==num[i]);j--){
			cnt+=a[j];
			if(cnt>0){
				sum[j]=sum[j+1]+1;
			}else{
				sum[j]=sum[j+1];
			}
		}
	}
}
int main(){
    cin>>n>>q;
    init();
    solve();
    for(register long long i=1;i<=q;i++){
    	long long l,r;
		scanf("%lld %lld",&l,&r);
		if(z[r]==0){
			printf("0\n");
		}else if(num[z[r]]<l){
			printf("0\n");
		}else{
			printf("%lld\n",sum[l]-sum[num[z[r]]+1]);
		}
	}
    return 0;
}
2024/3/25 19:34
加载中...