Submission #1272606

#TimeUsernameProblemLanguageResultExecution timeMemory
1272606algoproclubSum Zero (RMI20_sumzero)C++20
61 / 100
436 ms75268 KiB
// UUID: 138309eb-f5ca-4339-8308-550a1fea64ab
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int c=4e5+10,k=19;
int kov[c][k];
signed main() {
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n; cin>>n;
	vector<int> pref(n+1);
	for(int i=1; i<=n; i++)
	{
		int x; cin>>x;
		pref[i]=pref[i-1]+x;
	}
	map<int, int> ind;
	kov[n+1][0]=n+1;
	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...