제출 #1356757

#제출 시각아이디문제언어결과실행 시간메모리
1356757husuuuHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
744 ms82704 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>

using namespace std;

const int MAXN = 1000005;
int n, m;
int w[MAXN];
long long tree[4 * MAXN];
int ans[MAXN];

struct Query {
    int l, r, id;
    long long k;
};

vector<Query> queries[MAXN];

void update(int node, int start, int end, int idx, long long val) {
    if (start == end) {
        tree[node] = max(tree[node], val);
        return;
    }
    int mid = (start + end) / 2;
    if (idx <= mid) update(2 * node, start, mid, idx, val);
    else update(2 * node + 1, mid + 1, end, idx, val);
    tree[node] = max(tree[2 * node], tree[2 * node + 1]);
}

long long query_tree(int node, int start, int end, int l, int r) {
    if (r < start || end < l) return 0;
    if (l <= start && end <= r) return tree[node];
    int mid = (start + end) / 2;
    return max(query_tree(2 * node, start, mid, l, r),
               query_tree(2 * node + 1, mid + 1, end, l, r));
}

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

    if (!(cin >> n >> m)) return 0;
    for (int i = 1; i <= n; i++) cin >> w[i];

    for (int i = 0; i < m; i++) {
        int l, r;
        long long k;
        cin >> l >> r >> k;
        queries[r].push_back({l, r, i, k});
    }

    stack<int> s;
    for (int j = 1; j <= n; j++) {
        while (!s.empty() && w[s.top()] <= w[j]) {
            s.pop();
        }
        if (!s.empty()) {
            // w[s.top()] is the nearest greater element to the left
            update(1, 1, n, s.top(), (long long)w[s.top()] + w[j]);
        }
        s.push(j);

        for (auto &q : queries[j]) {
            long long max_val = query_tree(1, 1, n, q.l, q.r);
            ans[q.id] = (max_val <= q.k) ? 1 : 0;
        }
    }

    for (int i = 0; i < m; i++) {
        cout << ans[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...