제출 #1242024

#제출 시각아이디문제언어결과실행 시간메모리
1242024hynmjSum Zero (RMI20_sumzero)C++20
22 / 100
84 ms22600 KiB
//~~~~~~~~~~~~~MJ®™~~~~~~~~~~~~~
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
#define rep1(n) for(ll i=0; i<(ll)(n); ++i)
#define rep2(i,n) for(ll i=0; i<(ll)(n); ++i)
#define rep3(i,a,b) for(ll i=(ll)(a); i<(ll)(b); ++i)
#define rep4(i,a,b,c) for(ll i=(ll)(a); i<(ll)(b); i+=(c))
#define cut4(a,b,c,d,e,...) e
#define rep(...) cut4(__VA_ARGS__,rep4,rep3,rep2,rep1)(__VA_ARGS__)
#define per1(n) for(ll i=((ll)n)-1; i>=0; --i)
#define per2(i,n) for(ll i=((ll)n)-1; i>=0; --i)
#define per3(i,a,b) for(ll i=((ll)a)-1; i>=(ll)(b); --i)
#define per4(i,a,b,c) for(ll i=((ll)a)-1; i>=(ll)(b); i-=(c))
#define per(...) cut4(__VA_ARGS__,per4,per3,per2,per1)(__VA_ARGS__)
#define ll long long
#define ln cout<<endl
#define int long long
#define Code ios_base::sync_with_stdio(0);
#define by cin.tie(NULL);
#define Hayan cout.tie(NULL);
#define append push_back
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(),(x).rend()
#define vi vector<int>
#define ret(x) {cout<<x;return;}
#define ui map<int,int>
#define pi pair<int,int>
#define ff first
#define ss second
using namespace std;
template <typename T> using v = vector<T>;
const int INF = 1e18, MOD = 1e9+7, N = 4e5+7;
vi primes;
int seen[N+1];
int st[N][22];

void solve()
{
	int n, q, e;
	cin >> n;
	vi a(n);
	rep(n)
	{
		cin >> e;
		a[i] = e;
	}

	vi pref(n+1, 0);
	rep(i, 1, n+1)
		pref[i] = pref[i-1] + a[i-1];
    rep(n+2) st[i][0] = n+1;

    map<int, int> last;
    
    per(i, n+1)
    {
        st[i][0] = (last.count(pref[i]) ? last[pref[i]] : n+1);
        last[pref[i]] = i;
    }

	per(i, n+1)
		st[i][0] = min(st[i][0], st[i+1][0]);

	rep(p, 1, 22)
	{
		rep(i, 0, n+2)
		{
			st[i][p] = st[st[i][p-1]][p-1];
		}
	}

	cin >> q;
	rep(q)
	{
		int l, r, ans = 0;
		cin >> l >> r;
		l--;

		for (int i = 20; i >= 0; i--)
		{
			if (st[l][i] <= r)
			{
				l = st[l][i];
				ans += (1LL << i);
			}
		}
		cout << ans << " ";
	}
}

signed main()
{
	Code by Hayan
	int ans = 1;
	rep(ans)
	{
		solve(); ln;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...