Submission #645897

#TimeUsernameProblemLanguageResultExecution timeMemory
645897blueSum Zero (RMI20_sumzero)C++17
22 / 100
1082 ms3616 KiB
#include <bits/stdc++.h>
using namespace std;

using vi = vector<int>;
using ll = long long;

ll* c;

int main()
{
	int N;
	cin >> N;

	ll d[N+1];
	c = d;
	c[0] = 0;
	for(int i = 1; i <= N; i++)
	{
		cin >> c[i];
		c[i] += c[i-1];
	}

	int lst[N+1];
	for(int i = 0; i <= N; i++)
		lst[i] = i;
	sort(lst, lst+N+1, [] (int u, int v)
	{
		if(c[u] == c[v])
			return u < v;
		return c[u] < c[v];
	});

	int nxt[N+1];
	for(int i = 0; i <= N; i++)
		nxt[i] = N+1;

	for(int i = 0; i+1 <= N; i++)
	{
		if(c[lst[i]] == c[lst[i+1]])
			nxt[lst[i]] = lst[i+1];
	}

	// for(int i = 0; i <= N; i++)
	// 	cerr << nxt[i] << ' ';
	// cerr << '\n';

	for(int i = N-1; i >= 0; i--)
		nxt[i] = min(nxt[i], nxt[i+1]);

	int Q;
	cin >> Q;

	// cerr << "done\n";

	for(int j = 1; j <= Q; j++)
	{
		int L, R;
		cin >> L >> R;
		L--;

		int res = 0;
		while(nxt[L] <= R)
		{
			L = nxt[L];
			res++;
		}

		cout << res << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...