Submission #1346142

#TimeUsernameProblemLanguageResultExecution timeMemory
1346142isamatdinHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
710 ms110700 KiB
#include <bits/stdc++.h>

using namespace std;
#define int long long
const int inf = 1e18;
const int mod = 1e9 + 7;

struct SegTree {
    int sz;
    vector<int> tree;
    SegTree(int n) {
        sz = 1;
        while (sz < n)
            sz *= 2;
        tree.assign(sz * 2, 0);
    }
    void set(int i, int v, int x, int lx, int rx) {
        if (rx - lx == 1) {
            tree[x] = v;
            return;
        }
        int m = (lx + rx) / 2;
        if (i < m)
            set(i, v, 2 * x + 1, lx, m);
        else
            set(i, v, 2 * x + 2, m, rx);
        tree[x] = max(tree[2 * x + 1], tree[2 * x + 2]);
    }
    void set(int i, int v) { set(i, v, 0, 0, sz); }
    int res(int l, int r, int x, int lx, int rx) {
        if (l <= lx && rx <= r)
            return tree[x];
        if (rx <= l || r <= lx)
            return 0;
        int m = (lx + rx) / 2;
        return max(res(l, r, 2 * x + 1, lx, m), res(l, r, 2 * x + 2, m, rx));
    }
    int res(int l, int r) { return res(l, r, 0, 0, sz); }
};

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

    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (auto &i : a)
        cin >> i;
    vector<array<int, 3>> q(m);
    vector<int> ans(m);
    vector<vector<int>> query(n);
    for (int i = 0; i < m; i++) {
        int l, r, k;
        cin >> l >> r >> k;
        l--, r--;
        query[l].push_back(i);
        q[i] = {l, r, k};
    }
    SegTree sg(n);
    stack<int> st;
    for (int i = n - 1; i >= 0; i--) {
        while (!st.empty() && a[st.top()] < a[i])
            sg.set(st.top(), a[i] + a[st.top()]), st.pop();
        st.push(i);
        for (auto &j : query[i])
            ans[j] = sg.res(q[j][0], q[j][1] + 1) <= q[j][2];
    }
    for (auto &i : ans)
        cout << i << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...