Submission #1304791

#TimeUsernameProblemLanguageResultExecution timeMemory
1304791michael12Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
757 ms49684 KiB
#include <bits/stdc++.h>
using namespace std;

const long long INF = 1e18;
struct SegmentTree {
    int n;
    vector<long long> tree;
    SegmentTree(vector<long long>& data) {
        n = data.size();
        tree.resize(4 * n);
        build(1, 0, n - 1, data);
    }
    void build(int node, int l, int r, vector<long long>& data) {
        if (l == r) {
            tree[node] = data[l];
            return;
        }
        int mid = (l + r) / 2;
        build(node * 2,   l,     mid, data);
        build(node * 2 + 1, mid + 1, r,   data);
        tree[node] = max(tree[node * 2], tree[node * 2 + 1]);
    }
    long long query(int node, int l, int r, int ql, int qr) {
        if (qr < l || r < ql)
            return -INF;
        if (ql <= l && r <= qr)
            return tree[node];
        int mid = (l + r) / 2;
        return max(
            query(node * 2,     l,       mid, ql, qr),
            query(node * 2 + 1, mid + 1, r,   ql, qr)
        );
    }

    long long query(int l, int r) {
        return query(1, 0, n - 1, l, r);
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;

    vector<long long> w(N);
    for (int i = 0; i < N; i++) {
        cin >> w[i];
    }

    vector<long long> bad(N, 0);
    stack<long long> st;

    for (int i = N - 1; i >= 0; i--) {
        while (!st.empty() && st.top() >= w[i]) {
            st.pop();
        }

        if (!st.empty()) {
            bad[i] = w[i] + st.top();
        }

        st.push(w[i]);
    }

    SegmentTree seg(bad);

    while (M--) {
        int l, r;
        long long k;

        cin >> l >> r >> k;
        l--; 
        r--;

        long long mx = seg.query(l, r);
        cout << (mx <= k ? 1 : 0) << '\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...