제출 #1161148

#제출 시각아이디문제언어결과실행 시간메모리
1161148AlgorithmWarriorHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1041 ms30592 KiB
#include <bits/stdc++.h>

using namespace std;

int const MAX=1e6+5;
int const INF=1e9+5;
int v[MAX];
int n,q;
struct query{
    int l,r,id;
    bool operator<(query ot){
        return l>ot.l;
    }
}qry[MAX];
int chef[MAX];

void maxself(int& x,int val){
    if(x<val)
        x=val;
}

struct AIB{
    int v[MAX];
    int ub(int x){
        return x&(-x);
    }
    void add_val(int pos,int val){
        while(pos<=n){
            maxself(v[pos],val);
            pos+=ub(pos);
        }
    }
    int pref_max(int pos){
        int maxim=0;
        while(pos){
            maxself(maxim,v[pos]);
            pos-=ub(pos);
        }
        return maxim;
    }
}aib;

void read(){
    cin>>n>>q;
    int i;
    for(i=1;i<=n;++i)
        cin>>v[i];
    for(i=1;i<=q;++i){
        cin>>qry[i].l>>qry[i].r;
        qry[i].id=i;
        cin>>chef[i];
    }
}

void rev_array(int v[]){
    int st=1,dr=n;
    while(st<dr){
        swap(v[st],v[dr]);
        ++st;
        --dr;
    }
}

void rev_problem(){
    rev_array(v);
    int i;
    for(i=1;i<=q;++i){
        qry[i].l=n-qry[i].l+1;
        qry[i].r=n-qry[i].r+1;
        swap(qry[i].l,qry[i].r);
    }
    sort(qry+1,qry+q+1);
}

int answer[MAX];

void solve(){
    v[n+1]=INF;
    stack<int>stv;
    stv.push(n+1);
    int i;
    int id=1;
    for(i=n;i;--i){
        int val=v[i];
        while(v[stv.top()]<=val)
            stv.pop();
        aib.add_val(stv.top(),val+v[stv.top()]);
        stv.push(i);
        while(id<=q && qry[id].l==i){
            answer[qry[id].id]=aib.pref_max(qry[id].r);
            ++id;
        }
    }
}

void write(){
    int i;
    for(i=1;i<=q;++i)
        cout<<(chef[i]>=answer[i])<<'\n';
}

int main()
{
    read();
    rev_problem();
    solve();
    write();
    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...