Submission #1324251

#TimeUsernameProblemLanguageResultExecution timeMemory
1324251seyityunusHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1364 ms111872 KiB
#include "bits/stdc++.h"
using namespace std;

#define ll  long long
#define pb  push_back
#define ppb  pop_back
#define inf  1e18
#define all(v)   v.begin(), v.end()
#define ff  first
#define ss  second
#define sz  size
#define intmx  INT_MAX
#define intmn   INT_MIN

const int N = 1000005;
ll bit[N];
int ans[N];

struct qu {
    int r, id;
    ll k;
};

void upd(int i, ll val, int n) {
    for(; i <= n; i += i & -i) bit[i] = max(bit[i], val);
}

ll get(int i) {
    ll res = 0;
    for(; i > 0; i -= i & -i) res = max(res, bit[i]);
    return res;
}

void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> w(n+1);
    for(int i = 1; i <= n; i++) {
        cin >> w[i];
    }
    
    vector<int> L(n+1, 0);
    stack<int> s;
    for(int i = 1; i <= n; i++) {
        while(!s.empty() && w[s.top()] <= w[i]) s.pop();
        if(!s.empty()) L[i] = s.top();
        s.push(i);
    }
    
    vector<vector<int>> g(n+1);
    for(int i = 1; i <= n; i++) {
        if(L[i] != 0) g[L[i]].pb(i);
    }
    
    vector<vector<qu>> q_at(n+1);
    for(int i = 1; i <= m; i++) {
        int l, r;
        ll k;
        cin >> l >> r >> k;
        q_at[l].pb({r, i, k});
    }
    
    for(int i = n; i >= 1; i--) {
        for(int idx : g[i]) {
            upd(idx, (ll)w[i] + w[idx], n);
        }
        for(auto &q : q_at[i]) {
            if(get(q.r) <= q.k) ans[q.id] = 1;
            else ans[q.id] = 0;
        }
    }
    
    for(int i = 1; i <= m; i++) {
        cout << ans[i] << endl;
    }
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    while(t--) {
        solve();
    }
    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...