Submission #1242027

#TimeUsernameProblemLanguageResultExecution timeMemory
1242027muhammad-ahmadSum Zero (RMI20_sumzero)C++20
0 / 100
2 ms1088 KiB
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
#include <numeric>
#include <stack>
using namespace std;

#define endl "\n"

void solve() {
    int n; 
    cin >> n;
    map<int, int> c;
    vector<int> a(n + 2), p(n + 2);
    vector<vector<int>> bl(n + 2, vector<int>(18, -1)); // Initialize with -1
    int l = 0;

    c[0] = 1;

    for (int i = 2; i <= n + 1; i++) {
        cin >> a[i];
        p[i] = p[i - 1] + a[i];
        if (c.count(p[i]) && p[i] == p[c[p[i]]]) {
            l = max(l, c[p[i]]);
        }
        bl[i][0] = l;
        c[p[i]] = i;
    }

    for (int j = 1; j <= 17; j++) {
        for (int i = 1; i <= n + 1; i++) {
            bl[i][j] = bl[bl[i][j - 1]][j - 1];
        }
    }

    int q; 
    cin >> q;
    for (int i = 1; i <= q; i++) {
        int l, r; 
        cin >> l >> r;
        l++, r++;
        int ans = 0;
        int j = 17;
        while (j >= 0) {
            if (bl[r][j] >= l - 1) {
                ans += (1ll << j);
                r = bl[r][j];
            }
            j--;
        }
        cout << ans << endl;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cout << setprecision(9);
    srand(time(0));

    int tc = 1;
    while (tc--) {
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...