Submission #737620

#TimeUsernameProblemLanguageResultExecution timeMemory
737620PenguinsAreCuteHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1332 ms150264 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef pair<int,int> ii;
#define REP(i, a, b) for(int i = a; i < b; i++)
struct query{int x, y, k, idx;};
bool comp(query a, query b) {return a.y<b.y;}
struct node{
    int s,e,m,v;
    node *l,*r;
    node(int _s, int _e) {
        s=_s;e=_e;m=(s+e)>>1;v=-1210201069;
        if(s!=e){
            l=new node(s,m);
            r=new node(m+1,e);
        }
    }
    void up(int x, int u) {
        if(s==e) {v=max(v,u);return;}
        if(x<=m) l->up(x,u);
        else r->up(x,u);
        v=max(l->v,r->v);
    }
    int qry(int x, int y) {
        if(s==x&&e==y) return v;
        if(y<=m) return l->qry(x,y);
        if(x>m) return r->qry(x,y);
        return max(l->qry(x,m),r->qry(m+1,y));
    }
}*root;
int32_t main() {
    ios_base::sync_with_stdio(0);cin.tie(0);
    int N, M; cin >> N >> M;
    root=new node(0,N-1);
    int W[N];REP(i,0,N)cin>>W[i];
    query q[M];
    REP(i,0,M){
        cin>>q[i].x>>q[i].y>>q[i].k;
        q[i].x--;q[i].y--;q[i].idx=i;
    }
    sort(q,q+M,comp);
    vector<ii> mono_stack;
    bool ans[M];
    REP(i,0,M) {
        REP(j,(i?(q[i-1].y+1):0),q[i].y+1) {
            auto it=lower_bound(mono_stack.begin(),mono_stack.end(),mp(W[j],1e9),greater<ii>());
            if(it!=mono_stack.begin()) {
                it--; root->up((*it).se,(*it).fi+W[j]);
            }
            while(mono_stack.size()&&mono_stack.back().fi<=W[j]) mono_stack.pop_back();
            mono_stack.pb(mp(W[j],j));
        }
        ans[q[i].idx]=root->qry(q[i].x,N-1)<=q[i].k;
    }
    REP(i,0,M) cout << (ans[i]?1:0) << "\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...