Submission #153466

#TimeUsernameProblemLanguageResultExecution timeMemory
153466leathermanHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
64 / 100
3049 ms110416 KiB
#include <bits/stdc++.h> #pragma GCC optimize("-O3") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #define ll int #define fi first #define se second #define all(x) x.begin(),x.end() #define sqr(x) (x)*(x) #define PB push_back using namespace std; typedef long double ld; const ll N = 1123456; mt19937_64 rnd(chrono::system_clock::now().time_since_epoch().count()); vector<pair<ll, ll> > v; vector<ll> of[N],q[N],pisos ; pair<ll, ll> b[N]; ll ans[N],t[4 * N],a[N],l,r,x,k,limit,n,Q; void upd(ll v,ll tl,ll tr,ll pos,ll val) { if(tl == tr) { t[v] = max(t[v], val); return; } ll tm = (tl + tr) / 2; if(pos <= tm) upd(2 * v, tl, tm, pos, val); else upd(2 * v + 1, tm + 1, tr, pos, val); t[v] = max(t[2 * v], t[2 * v + 1]); } ll get(ll v,ll tl,ll tr,ll l,ll r) { if(l > r) return 0; if(tl == l && tr == r) return t[v]; ll tm = (tl + tr) / 2; return max(get(2 * v, tl, tm, l, min(r, tm)), get(2 * v + 1, tm + 1, tr, max(l, tm + 1), r)); } int main() { ios_base::sync_with_stdio();cin.tie(0);cout.tie(0); cin>>n>>Q; for(int i = 1; i <= n; i++) cin>>a[i]; for(int i = n; i >= 1; i--) { x = a[i]; while(!v.empty() && x > v.back().fi) { of[i].PB(v.back().se); v.pop_back(); } v.PB({x, i}); } for(int i = 1; i <= Q; i++) { cin>>l>>r>>k; b[i] = {r, k}; q[l].PB(i); pisos.PB(l); } limit = n; sort(all(pisos)); pisos.erase(unique(all(pisos)), pisos.end()); reverse(all(pisos)); for(auto l : pisos) for(auto i : q[l]) { r = b[i].fi; while(limit >= l) { for(auto j : of[limit]) upd(1, 1, n, j, a[j] + a[limit]); limit--; } x = get(1, 1, n, l, r); // cout<<l<<" "<<r<<" = "<<x<<endl; ans[i] = (x <= b[i].se); } for(int i = 1; i <= Q; i++) cout<<ans[i]<<endl; return 0; } /* 8 6 5 4 3 1 6 7 8 2 1 5 0 2 5 0 3 5 0 4 5 0 5 5 0 1 8 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...