Submission #850770

#TimeUsernameProblemLanguageResultExecution timeMemory
850770alexddSum Zero (RMI20_sumzero)C++17
61 / 100
337 ms54948 KiB
#include<bits/stdc++.h>
using namespace std;
int n;
long long pref[500005];
int anc[500005][20];
map<long long,int> ult;
void calc_anc()
{
    for(int p=1;p<20;p++)
    {
        for(int i=1;i<=n+2;i++)
        {
            anc[i][p]=anc[anc[i][p-1]][p-1];
        }
    }
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    int a;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        pref[i]=pref[i-1]+a;
    }
    anc[n+1][0]=n+2;
    anc[n+2][0]=n+2;
    for(int i=n;i>0;i--)
    {
        anc[i][0]=anc[i+1][0];
        ult[pref[i]]=i;
        if(ult[pref[i-1]]!=0)
            anc[i][0]=min(anc[i][0], ult[pref[i-1]]+1);
    }
    calc_anc();
    int cntq,b;
    cin>>cntq;
    for(int i=0;i<cntq;i++)
    {
        cin>>a>>b;
        int rez=0;
        for(int p=19;p>=0;p--)
        {
            if(anc[a][p]-1<=b)
            {
                rez+=(1<<p);
                a=anc[a][p];
            }
        }
        cout<<rez<<"\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...