Submission #1335952

#TimeUsernameProblemLanguageResultExecution timeMemory
1335952itslqHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
8 / 100
742 ms327680 KiB
#include "bits/stdc++.h"
using namespace std;

#define int long long

const int INF = 1e12;

struct node {
    int l, r, m, v = -INF;
    node *lc, *rc;

    node(int _l, int _r): l(_l), r(_r), m((_l + _r) >> 1) {
        if (l != r) {
            lc = new node(l, m);
            rc = new node(m + 1, r);
        }
    }

    void update(int n, int _v) {
        if (l == r) {
            v = _v;
            return;
        }
        if (n <= m) lc -> update(n, _v);
        else rc -> update(n, _v);
        v = max(lc -> v, rc -> v);
    }

    int query(int _l, int _r) {
        if (_r < _l) return -INF;
        if (l == _l && r == _r) return v;
        if (_r <= m) return lc -> query(_l, _r);
        if (_l > m) return rc -> query(_l, _r);
        return max(lc -> query(_l, m), rc -> query(m + 1, _r));
    }

} *root;

signed main() {
    int N, Q, l, r, k;
    cin >> N >> Q;

    vector<int> W(N), A, B;
    for (int i = 0; i < N; i++) cin >> W[i];

    A = B = W;
    sort(B.begin(), B.end());
    B.erase(unique(B.begin(), B.end()), B.end());
    for (int i = 0; i < N; i++) A[i] = lower_bound(B.begin(), B.end(), W[i]) - B.begin();

    while (Q--) {
        cin >> l >> r >> k;
        l--, r--;

        root = new node(0, N - 1);
        bool possible = true;

        for (int i = l; i <= r; i++) {
            root -> update(A[i], W[i]);
            if (i != l) {
                if (root -> query(A[i] + 1, N - 1) + W[i] > k) {
                    possible = false;
                    break;
                }
            }
        }

        cout << (possible ? "1\n" : "0\n");
    }
}
#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...