Submission #1269495

#TimeUsernameProblemLanguageResultExecution timeMemory
1269495krzyskaHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1045 ms64328 KiB
#include <bits/stdc++.h>
using namespace std;
int n;
int tab[1000006];

struct zap{
    int l;
    int k;
    int i;
};
vector<zap> Q[1000006];

constexpr int base = (1 << 20);
int drzewo[base*2];

int a, b;
int maximum(int v, int l, int p){
    if(a <= l && p <= b){
        return drzewo[v];
    }
    if(a > p || b < l){
        return 0;
    }

    return max(maximum(v*2, l, (l + p)/2), maximum(v*2 + 1, (l + p)/2 + 1, p));
}

void zmiana(int v, int x){
    v += base;
    drzewo[v] = max(drzewo[v], x);
    v /= 2;

    while(v){
        drzewo[v] = max(drzewo[v*2], drzewo[v*2 + 1]);
        v /= 2;
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int q;
    cin >> n >> q;
    for(int i = 1; i <= n; i++){
        cin >> tab[i];
    }

    for(int i = 1; i <= q; i++){
        zap xd;
        int r;
        cin >> xd.l >> r >> xd.k;
        xd.i = i;
        Q[r].push_back(xd);
    }

    bool odp[q + 1];
    int wiekszy[n + 1];
    stack<int> sztos;

    for(int i = 1; i <= n; i++){
        while(sztos.size() && tab[sztos.top()] <= tab[i]){
            sztos.pop();
        }
        if(sztos.size()){
            wiekszy[i] = sztos.top();
        }
        else{
            wiekszy[i] = 0;
        }
        sztos.push(i);
    }

    for(int i = 1; i <= n; i++){
        if(wiekszy[i]){
            zmiana(wiekszy[i], tab[i] + tab[wiekszy[i]]);
        }
        for(auto j:Q[i]){
            a = j.l;
            b = i;
            if(maximum(1, 0, base - 1) > j.k){
                odp[j.i] = 0;
            }
            else{
                odp[j.i] = 1;
            }
        }
    }

    for(int i = 1; i <= q; i++){
        cout << odp[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...