제출 #1136195

#제출 시각아이디문제언어결과실행 시간메모리
1136195BuiDucManh123Sum Zero (RMI20_sumzero)C++17
61 / 100
302 ms40240 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define pii pair<int, int>
using namespace std;

const int lg = 20;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, q;
    cin >> n;

    vector<vector<int>> f(lg, vector<int>(n + 1, -1)); // Use vector for memory efficiency
    unordered_map<ll, int> check;
    ll sum = 0;

    for (int i = 1; i <= n; ++i) {
        int a;
        cin >> a;
        sum += a;

        if (!check.count(sum) && sum != 0) {
            check[sum] = -1;
        }
        f[0][i] = max(check[sum], f[0][i - 1]);
        check[sum] = i;
    }

    // Clear the map after usage
    check.clear();

    // Build sparse table
    for (int i = 1; i < lg; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (f[i - 1][j] != -1) {
                f[i][j] = f[i - 1][f[i - 1][j]];
            }
        }
    }

    // Answer queries
    cin >> q;
    while (q--) {
        int l, r, ans = 0;
        cin >> l >> r;

        for (int i = lg - 1; i >= 0; --i) {
            if (f[i][r] >= l - 1) {
                ans += (1 << i);
                r = f[i][r];
            }
        }
        cout << ans << "\n";
    }

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