Submission #428986

#TimeUsernameProblemLanguageResultExecution timeMemory
428986jovan_bHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
2239 ms79856 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;

const int MAXN = 1000000;

struct kveri{
    int l, val, ind;
};

vector <kveri> queries[MAXN+5];

int seg[4*MAXN+5];
int a[MAXN+5];

void upd(int node, int l, int r, int x, int val){
    if(l == r){
        seg[node] = max(seg[node], val);
        return;
    }
    int mid = (l+r)/2;
    if(x <= mid) upd(node*2, l, mid, x, val);
    else upd(node*2+1, mid+1, r, x, val);
    seg[node] = max(seg[node*2], seg[node*2+1]);
}

int query(int node, int l, int r, int tl, int tr){
    if(l > tr || tl > r) return 0;
    if(tl <= l && r <= tr) return seg[node];
    int mid = (l+r)/2;
    return max(query(node*2, l, mid, tl, tr), query(node*2+1, mid+1, r, tl, tr));
}

bool res[MAXN+5];

int main(){
    ios_base::sync_with_stdio(false), cin.tie(0);
	cout.precision(10);
	cout << fixed;

    int n, m;
    cin >> n >> m;
    for(int i=1; i<=n; i++) cin >> a[i];
    for(int i=1; i<=m; i++){
        int l, r, v;
        cin >> l >> r >> v;
        queries[r].push_back({l, v, i});
    }
    stack <int> st;
    for(int i=1; i<=n; i++){
        while(!st.empty() && a[st.top()] <= a[i]) st.pop();
        if(!st.empty()){
            upd(1, 1, n, st.top(), a[st.top()] + a[i]);
        }
        for(auto kveri : queries[i]){
            res[kveri.ind] = (query(1, 1, n, kveri.l, i) <= kveri.val);
        }
        st.push(i);
    }
    for(int i=1; i<=m; i++) cout << res[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...