借鉴了一下题解,样例全能过,但交上去全部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;
}