제출 #1181900

#제출 시각아이디문제언어결과실행 시간메모리
1181900sofija6Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
876 ms76108 KiB
#include <bits/stdc++.h> #define ll long long #define MAXN 1000010 using namespace std; ll n,w[MAXN],sz; vector<pair<ll,ll> > queries[MAXN]; struct seg_tree { vector<ll> st; void Init() { sz=1; while (sz<n) sz <<= 1; st.resize(2*sz+2); } void Update(ll pos,ll val,ll x,ll lx,ll rx) { if (lx==rx) { st[x]=max(st[x],val); return; } ll mid=(lx+rx)/2; if (pos<=mid) Update(pos,val,2*x,lx,mid); else Update(pos,val,2*x+1,mid+1,rx); st[x]=max(st[2*x],st[2*x+1]); } ll Calc(ll l,ll r,ll x,ll lx,ll rx) { if (lx>r || rx<l) return 0; if (lx>=l && rx<=r) return st[x]; ll mid=(lx+rx)/2; return max(Calc(l,r,2*x,lx,mid),Calc(l,r,2*x+1,mid+1,rx)); } }; seg_tree S; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll m,l,r,k; cin >> n >> m; for (ll i=1;i<=n;i++) cin >> w[i]; for (ll i=1;i<=m;i++) { cin >> l >> r >> k; queries[r].push_back({l,k}); } S.Init(); stack<ll> s; for (ll i=1;i<=n;i++) { while (!s.empty() && w[s.top()]<=w[i]) s.pop(); if (!s.empty()) S.Update(s.top(),w[s.top()]+w[i],1,1,sz); s.push(i); for (auto p : queries[i]) cout << (S.Calc(p.first,i,1,1,sz)<=p.second) << "\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...