Submission #961609

#TimeUsernameProblemLanguageResultExecution timeMemory
961609thangdz2k7Sum Zero (RMI20_sumzero)C++17
61 / 100
286 ms50676 KiB
// author : HuuHung
// 25.3.2024


#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define vi vector <int>

using namespace std;

const int N = 4e5 + 5;

// * end

int n, q;
map <ll, int> mp;
vector <vi> adj, ev;
vi l, ans;
vector <int> dhs;

void dfs(int u){
    dhs.pb(u);
    for (int i : ev[u]){
        int L = 0;
        int R = dhs.size() - 1;
        while (L <= R){
            int mid = L + R >> 1;
            if (dhs[mid] >= l[i]){
                ans[i] = mid;
                R = mid - 1;
            }
            else L = mid + 1;
        }
        ans[i] = dhs.size() - ans[i];
    }
    for (int v : adj[u]) dfs(v);
    dhs.pop_back();
}

void solve(){
    cin >> n;
    mp[0] = 1;
    ll sum = 0;
    int nxt = -1;
    adj.resize(n + 2);
    adj[0].pb(1);
    for (int i = 1; i <= n; ++ i){
        int c; cin >> c;
        sum += c;
        nxt = max(nxt, mp[sum] - 1);
        adj[nxt + 1].pb(i + 1);
        //cout << nxt[i] << endl;
        mp[sum] = i + 1;
    }

    cin >> q;
    ev.resize(n + 2);
    l.resize(q + 1);
    ans.resize(q + 1);
    for (int i = 1; i <= q; ++ i){
        int r;
        cin >> l[i] >> r; ++ r;
        ev[r].pb(i);
    }
    dfs(0);
    for (int i = 1; i <= q; ++ i) cout << ans[i] - 1 << '\n';
}


int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    while (t --) solve();

    return 0;
}






Compilation message (stderr)

sumzero.cpp: In function 'void dfs(int)':
sumzero.cpp:28:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   28 |             int mid = L + R >> 1;
      |                       ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...