Submission #942621

#TimeUsernameProblemLanguageResultExecution timeMemory
942621adaawfSum Zero (RMI20_sumzero)C++17
0 / 100
5 ms4440 KiB
#include <iostream>
#include <algorithm>
using namespace std;
int l[400005][2], f[400005];
pair<long long int, int> c[400005];
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    long long int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        c[i] = {c[i - 1].first + x, i};
        f[i] = -1e9;
    }
    sort(c, c + n + 1);
    for (int i = 1; i <= n; i++) {
        if (c[i].first == c[i - 1].first) {
            f[c[i].second] = c[i - 1].second;
        }
    }
    f[0] = l[0][0] = -1;
    for (int i = 1; i <= n; i++) {
        f[i] = max(f[i - 1], f[i]);
        l[i][0] = f[i];
    }
    for (int i = 1; i <= 2; i++) {
        for (int j = 0; j <= n; j++) {
            int h = j;
            for (int k = 0; k < 400; k++) {
                if (h == -1 || l[h][i - 1] == -1) {
                    h = -1;
                    break;
                }
                else h = l[h][i - 1];
            }
            l[j][i] = h;
        }
    }
    int q;
    cin >> q;
    for (int jj = 0; jj < q; jj++) {
        int x, y, res = 0;
        cin >> x >> y;
        for (int i = 1; i >= 0; i--) {
            if (y < x) break;
            int c = 1;
            for (int j = 1; j <= i; j++) c *= 400;
            while (l[y][i] >= x - 1) {
                y = l[y][i];
                res += c;
            }
        }
        cout << res << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...