Submission #672094

#TimeUsernameProblemLanguageResultExecution timeMemory
672094GudStonksHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1196 ms107332 KiB
#include<bits/stdc++.h> using namespace std; #define ft first #define sd second typedef long long ll; const ll MOD = 1e9+7; ll n, q, arr[1000005], brr[1000005], ans[1000005], t[(1000005 << 2)]; stack<ll>s; vector<pair<pair<ll, ll>, pair<ll, ll> > >v; void upd(ll pos, ll val, ll v = 1, ll tl = 1, ll tr = n){ if(pos < tl || pos > tr)return; if(tl == tr){ t[v] = max(t[v], val); return; } ll m = (tl + tr) / 2; upd(pos, val, v + v, tl, m); upd(pos, val, v + v + 1, m + 1, tr); t[v] = max(t[v + v], t[v + v + 1]); } ll get(ll l, ll r, ll v = 1, ll tl = 1, ll tr = n){ if(r < tl || l > tr)return 0; if(l <= tl && tr <= r) return t[v]; ll m = (tl + tr) / 2; return max(get(l, r, v + v, tl, m), get(l, r, v + v + 1, m + 1, tr)); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>q; for(int i = 1; i <= n; i++){ cin>>arr[i]; while(!s.empty() && arr[s.top()] <= arr[i])s.pop(); if(!s.empty())brr[i] = s.top(); s.push(i); } for(int i = 1, a, b, c; i <= q; i++){ cin>>a>>b>>c; v.push_back({{b, a}, {c, i}}); } sort(v.begin(), v.end()); ll j = 0; for(auto it : v){ ll r = it.ft.ft, l = it.ft.sd, k = it.sd.ft, i = it.sd.sd; while(j < r){ j++; if(brr[j]){ upd(brr[j], arr[j] + arr[brr[j]]); } } ans[i] = (get(l, r) <= k ? 1 : 0); } for(int i = 1; i <= q; i++)cout<<ans[i]<<'\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...