Submission #534484

#TimeUsernameProblemLanguageResultExecution timeMemory
534484amunduzbaevSum Zero (RMI20_sumzero)C++17
61 / 100
916 ms42272 KiB
#include "bits/stdc++.h"
using namespace std;
 
#define ar array
 
signed main(){
	ios::sync_with_stdio(0); cin.tie(0);
	
	int n; cin>>n;
	vector<int> a(n);
	for(int i=0;i<n;i++) cin>>a[i];
	vector<vector<int>> par(n + 1, vector<int>(10, -1));
	map<long long, int> last;
	long long pref = 0; last[pref] = n;
	for(int i=n-1;~i;i--){
		pref += a[i];
		if(last.count(pref)) par[i][0] = last[pref];
		
		last[pref] = i;
		if(i + 1 < n && ~par[i+1][0]){
			if(par[i][0] == -1) par[i][0] = par[i+1][0];
			else par[i][0] = min(par[i][0], par[i+1][0]);
		}
	}
	
	for(int j=1;j<10;j++){
		for(int i=0;i<n;i++){
			int x = i;
			for(int l=0;l<4 && ~x;l++){
				x = par[x][j-1];
			} par[i][j] = x;
		}
	}
	
	int q; cin>>q;
	while(q--){
		int l, r; cin>>l>>r;
		l--;
		int res = 0;
		for(int j=9;~j;){
			if(~par[l][j] && par[l][j] <= r){
				l = par[l][j];
				res += (1 << (j * 2));
			} else j--;
		}
		
		cout<<res<<"\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...