Submission #728196

#TimeUsernameProblemLanguageResultExecution timeMemory
728196hmm789Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
1493 ms215932 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MOD 998244353
#define INF 1000000000000000000
#define EPS 1e-10

struct node {
    int s, e, m, v;
    node *l, *r;
    node(int _s, int _e) {
        s = _s, e = _e, m = (s+e)/2, v = 0;
        if(s != e) {
            l = new node(s, m);
            r = new node(m+1, e);
        }
    }
    void update(int x, int val) {
        if(s == e) {v = val; return;}
        else if(x > m) r->update(x, val);
        else l->update(x, val);
        v = max(l->v, r->v);
    }
    int rmax(int x, int y) {
        if(x <= s && e <= y) return v;
        else if(x > m) return r->rmax(x, y);
        else if(y <= m) return l->rmax(x, y);
        else return max(l->rmax(x, y), r->rmax(x, y));
    }
} *root;

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n, m, l, r, k, idx;
    cin >> n >> m;
    root = new node(0, n-1);
    int a, ans[m];
    pair<int, int> p[n];
    tuple<int, int, int, int> qry[m];
    stack<pair<int, int>> s;
    for(int i = 0; i < n; i++) {
        cin >> a;
        while(s.size() && s.top().first <= a) s.pop();
        if(s.size()) p[i] = {s.top().second, s.top().first+a};
        else p[i] = {i, 0};
        s.push({a, i});
    }
    for(int i = 0; i < m; i++) {
        cin >> l >> r >> k;
        l--; r--;
        qry[i] = {r, l, k, i};
    }
    sort(qry, qry+m);
    int cur = 0;
    for(int i = 0; i < m; i++) {
        tie(r, l, k, idx) = qry[i];
        while(cur <= r) {
            root->update(p[cur].first, p[cur].second);
            cur++;
        }
        ans[idx] = root->rmax(l, r) <= k;
    }
    for(int i = 0; i < m; i++) cout << ans[i] << '\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...