Submission #956694

#TimeUsernameProblemLanguageResultExecution timeMemory
956694Batorgil952Sum Zero (RMI20_sumzero)C++14
61 / 100
278 ms28864 KiB
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
 
using namespace std;
 
const int N=4e5+5;
int dp[N][12];
int b[N];
unordered_map< ll, int > M;
 
int main(){
	int n, i, j, q, l, r, ans, x;
	ll s;
	
	scanf("%d",&n);
	
	s=0;
	M[0]=0;
	for(i=1; i<=n; i++){
		scanf("%d",&x);
		s+=x;
		if(M[s]!=0){
			dp[i][0]=M[s]+1;
		}
		else{
			if(s==0) dp[i][0]=1;
			else dp[i][0]=-1;
		}
		if(dp[i][0]==-1 && i>1){
			dp[i][0]=dp[i-1][0];
		}
		else if(i>1) dp[i][0]=max(dp[i][0], dp[i-1][0]);
		M[s]=i;
	}
	
	
	for(i=1; i<=n; i++){
		for(j=1; j<=11; j++){
			if((dp[dp[i][j-1]-1][j-1]-1)>0) dp[i][j]=dp[dp[dp[i][j-1]-1][j-1]-1][j-1];
			else dp[i][j]=-1, j=20;
		}
	}
	
	b[0]=1;
	for(i=1; i<=11; i++){
		b[i]=b[i-1]*3;
	}
	
	scanf("%d",&q);
	
	while(q--){
		scanf("%d",&l);
		scanf("%d",&r);
		ans=0;
		for(i=11; i>=0; i--){
			if(r>=l){
				if(dp[r][i]>=l){
					if(dp[dp[r][i]-1][i]>=l){
						ans+=2*b[i];
						r=dp[dp[r][i]-1][i]-1;
						continue;
					}
					ans+=b[i];
					r=dp[r][i]-1;
				}
			}
		}
		printf("%d\n", ans);
	}
	
	return 0;
}

Compilation message (stderr)

sumzero.cpp: In function 'int main()':
sumzero.cpp:17:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |  scanf("%d",&n);
      |  ~~~~~^~~~~~~~~
sumzero.cpp:22:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |   scanf("%d",&x);
      |   ~~~~~^~~~~~~~~
sumzero.cpp:51:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |  scanf("%d",&q);
      |  ~~~~~^~~~~~~~~
sumzero.cpp:54:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   54 |   scanf("%d",&l);
      |   ~~~~~^~~~~~~~~
sumzero.cpp:55:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |   scanf("%d",&r);
      |   ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...