50分,只有三个测试数据TLE,看不出来了
查看原帖
50分,只有三个测试数据TLE,看不出来了
563112
luozichen楼主2023/10/2 23:07
#include <bits/stdc++.h>
using namespace std;
const int N = 200005; 

int p[N];
long long subsum[N];
int pre[N];
int a[N];
int last[N];
int cnt;

int main()
{
	int n,q;
	cin>>n>>q;
	subsum[0]=0;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		subsum[i]=subsum[i-1]+a[i];
		if(a[i]>0){
			p[i]=1;
			for(int j=i-1;j>=1;j--){
				long long tmp = subsum[i-1]-subsum[j-1];
				if(a[j]<=0&&tmp<=0 && (tmp+a[i]>0)){
					p[j]=1;
				}else
					break;
					
			}
			last[++cnt]=i;
		}
		
		
	}
	for(int i=1;i<=n;i++){
			pre[i]=pre[i-1]+p[i];
	}
	
	int l,r,ans;
 	ans=0;
	while(q--){
		scanf("%d%d",&l,&r);
		int now = cnt;
	//	tmp_r=r; 
		while(a[r]<=0){
     		  r--;

     	}
		if(r<l){
			cout<<"0\n";
		} 		
		else if(a[r]>0){
			cout<<(pre[r]-pre[l-1])<<endl;
		}
		
		
		
	}

	
 	 
	return 0;
}
2023/10/2 23:07
加载中...