제출 #1145711

#제출 시각아이디문제언어결과실행 시간메모리
11457110pt1mus23Sum Zero (RMI20_sumzero)C++20
100 / 100
248 ms20956 KiB
#pragma GCC optimize("O1")
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
using namespace std;
// #define int long long int
#define ins insert
#define pb  push_back
#define pii pair<int,int>
#define endl '\n' 
#define all(x) x.begin(),x.end()

const int mod = 998244353;
const int inf = INT_MAX;
const int LG  = 19;
const int sze = 4e5+23;
int dp[sze];
int radium[sze],ans[sze];

void fast(){
    int n;
    cin>>n;
    vector<int> arr(n);
    for(int i=1;i<=n;i++){
        cin>>arr[i];
    }

    map<int,int> last;
    last[0]=n+1;
    int sum=0;
    for(int i =0;i<n+23;i++){
        radium[i]=inf;
    }
    for(int i = n;i>=1;i--){
        sum+=arr[i];
        radium[i]=radium[i+1];
        if(last.count(sum)){
            radium[i]=min(radium[i],last[sum]);
        }
        last[sum]=i;
    }


    vector<pii> lst;

    int q;
    cin>>q;
    int m=q;
    while(q--){
        int l,r;
        cin>>l>>r;
        lst.pb({l,r});
    }

    // cout<<radium[radium[1]]<<endl;
    for(int b = 18;b>=0;b--){
        for(int i=0;i<=n;i++){
            dp[i]=radium[i];
        }
        dp[n+1]=inf;
        for(int x=0;x<b;x++){
            for(int i = 0;i<=n;i++){
                if(dp[i]!=inf){
                    dp[i]=dp[dp[i]];
                }
                else{
                    dp[i]=inf;
                }
            }
        }
        // cout<<b<<" "<<dp[1]<<endl;
        for(int i =0;i<m;i++){
            int x = lst[i].first;
            int y = lst[i].second;
            if( dp[x]<=y+1 ){
                // cout<<x<<" "<<dp[x]<<" "<<y<<endl;
                lst[i].first=dp[x];
                ans[i]+=(1<<b);
            }
        }
    }

    for(int i =0;i<m;i++){
        cout<<ans[i]<<"\n";
    }
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int tt =1;

    // cin>>tt;
    while(tt--){
        fast();
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...