Submission #850777

#TimeUsernameProblemLanguageResultExecution timeMemory
850777alexddSum Zero (RMI20_sumzero)C++17
0 / 100
3 ms2652 KiB
#include<bits/stdc++.h>
using namespace std;
int n;
int anc[500005][7];
int v[500005];
map<long long,int> ult;
int put7[7];
void calc_anc()
{
    for(int p=1;p<7;p++)
    {
        for(int i=1;i<=n+2;i++)
        {
            anc[i][p]=anc[anc[anc[anc[anc[anc[anc[i][p-1]][p-1]][p-1]][p-1]][p-1]][p-1]][p-1];
        }
    }
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    put7[0]=1;
    for(int i=1;i<7;i++)
        put7[i]=put7[i-1]*5;
    long long tot=0;
    cin>>n;
    int a;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
        tot+=v[i];
    }
    long long suff=0;
    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[tot-suff]=i;
        suff+=v[i];
        if(ult[tot-suff]!=0)
            anc[i][0]=min(anc[i][0], ult[tot-suff]+1);
    }
    calc_anc();
    int cntq,b;
    cin>>cntq;
    for(int i=0;i<cntq;i++)
    {
        cin>>a>>b;
        int rez=0;
        for(int p=6;p>=0;p--)
        {
            for(int j=0;j<6;j++)
            {
                if(anc[a][p]-1<=b)
                {
                    rez+=put7[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...