Submission #1272607

#TimeUsernameProblemLanguageResultExecution timeMemory
1272607algoproclubSum Zero (RMI20_sumzero)C++20
0 / 100
2 ms824 KiB
// UUID: 6f85f705-496a-4070-b4de-92a6dbecff01
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int c=4e5+10,k=19;
int kov[c][k];
int main() {
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n; cin>>n;
	vector<ll> pref(n+1);
	for(int i=1; i<=n; i++)
	{
		int x; cin>>x;
		pref[i]=pref[i-1]+x;
	}
	map<ll, int> ind;
	for(int i=n; i>=0; i--)
	{
		kov[i][0]=kov[i+1][0];
		if(ind.count(pref[i]))
		{
			kov[i][0]=min(kov[i][0],ind[pref[i]]);
		}
		ind[pref[i]]=i;
	}
	for(int j=0; j<k; j++)
		kov[n+1][j]=n+1;
	for(int j=1; j<k; j++)
		for(int i=0; i<=n; i++)
			kov[i][j]=kov[kov[i][j-1]][j-1];
	int q; cin>>q;
	while(q--)
	{
		int l,r; cin>>l>>r;
		int ans=0;
		l--;
		for(int i=k-1; i>=0; i--)
		{
			if(kov[l][i]<=r)
			{
				ans+=(1<<i);
				l=kov[l][i];
			}
		}
		cout<<ans<<"\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...