Submission #534462

#TimeUsernameProblemLanguageResultExecution timeMemory
534462amunduzbaevSum Zero (RMI20_sumzero)C++17
61 / 100
889 ms63880 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);
	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].push_back(last[pref]); // = last[pref];
		
		last[pref] = i;
		if(i + 1 < n && !par[i+1].empty()){
			if(par[i].empty()) par[i].push_back(par[i+1][0]);
			else par[i][0] = min(par[i][0], par[i+1][0]);
		}
	}
	
	for(int j=1;j<19;j++){
		for(int i=0;i<n;i++){
			if((int)par[i].size() >= j && (int)par[par[i][j-1]].size() >= j){
				par[i].push_back(par[par[i][j-1]][j-1]);
			}
		}
	}
	
	//~ cout<<"here"<<endl;
	int res = 0, q, l, r; cin>>q;
	while(q--){
		cin>>l>>r; l--;
		res=0;
		for(int j=19;~j && l < r;j--){
			if((int)par[l].size() > j && ~par[l][j] && par[l][j] <= r){
				res += (1 << j), l = par[l][j];
			}
		}
		
		cout<<res<<"\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...