Submission #445447

#TimeUsernameProblemLanguageResultExecution timeMemory
445447SirCovidThe19thHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
2490 ms92408 KiB
#include <bits/stdc++.h>
using namespace std; 

const int mx = 1e6+5;

int n, m, A[mx], bit[mx], ans[mx]; vector<array<int, 3>> R[mx];

void upd(int i, int val){
    for (; i > 0; i -= i&(-i)) bit[i] = max(bit[i], val);
}
int query(int i){
    int ret = 0;
    for (; i <= n; i += i&(-i)) ret = max(ret, bit[i]);
    return ret;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); 
    cin >> n >> m;
    for (int i = 1; i <= n; i++) cin >> A[i];
    for (int i = 1; i <= m; i++){
        int l, r, k; cin >> l >> r >> k;
        R[r].push_back({l, k, i});
    }stack<int> stk;
    for (int i = 1; i <= n; i++){
        while (!stk.empty() and A[stk.top()] <= A[i]) stk.pop();
        if (!stk.empty()) upd(stk.top(), A[stk.top()]+A[i]);
        for (auto x : R[i]) ans[x[2]] = (query(x[0]) <= x[1]);
        stk.push(i);
    }for (int i = 1; i <= m; i++) cout<<ans[i]<<endl;
}

#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...