제출 #1161146

#제출 시각아이디문제언어결과실행 시간메모리
1161146AlgorithmWarriorHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
66 ms3088 KiB
#include <bits/stdc++.h> using namespace std; int const MAX=2e5+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); } } 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...