Submission #534493

#TimeUsernameProblemLanguageResultExecution timeMemory
534493amunduzbaevSum Zero (RMI20_sumzero)C++17
0 / 100
1071 ms588 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>(5, -1));
	unordered_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<5;j++){
		for(int i=0;i<n;i++){
			int x = i;
			for(int l=0;l<16 && ~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=7;~j;){
			if(~par[l][j] && par[l][j] <= r){
				l = par[l][j];
				res += (1 << (j * 3));
			} else j--;
		}
		
		cout<<res<<"\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...