Submission #968919

#TimeUsernameProblemLanguageResultExecution timeMemory
96891912345678Sum Zero (RMI20_sumzero)C++17
0 / 100
3 ms4700 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=4e5+5, kx=19;

#define ll long long

int n, q, a[nx], L, R, vl[nx], dp[nx];
map<ll, int> mp;
ll qs;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n;
    for (int i=1; i<=n;i ++) cin>>a[i];
    mp[0]=1;
    for (int i=1; i<=n; i++)
    {
        qs+=a[i];
        if (mp.find(qs)!=mp.end()) vl[i]=mp[qs];
        mp[qs]=i+1;
    }
    for (int i=1; i<=n; i++) vl[i]=max(vl[i], vl[i-1]);
    for (int i=1; i<=n; i++) if (vl[i]) dp[i]=dp[vl[i]-1]+1;
    cin>>q;
    while (q--)
    {
        cin>>L>>R;
        if (dp[R]==0) cout<<0<<'\n';
        else
        {
            int l=L, r=R;
            while (l<r)
            {
                int md=(l+r)/2;
                if (vl[md]<l) l=md+1;
                else r=md;
            }
            cout<<dp[R]-dp[l]+1<<'\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...