Submission #428991

#TimeUsernameProblemLanguageResultExecution timeMemory
428991jovan_bHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1233 ms57716 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int MAXN = 1000000; struct kveri{ int l, val, ind; }; vector <kveri> queries[MAXN+5]; int bit[MAXN+5]; int a[MAXN+5]; void upd(int x, int val){ while(x <= MAXN){ bit[x] = max(bit[x], val); x += x & -x; } } int query(int x){ int res = 0; while(x){ res = max(res, bit[x]); x -= x & -x; } return res; } bool res[MAXN+5]; int main(){ ios_base::sync_with_stdio(false), cin.tie(0); cout.precision(10); cout << fixed; int n, m; cin >> n >> m; for(int i=1; i<=n; i++) cin >> a[i]; for(int i=1; i<=m; i++){ int l, r, v; cin >> l >> r >> v; queries[r].push_back({l, v, i}); } stack <int> st; for(int i=1; i<=n; i++){ while(!st.empty() && a[st.top()] <= a[i]) st.pop(); if(!st.empty()){ upd(MAXN+1-st.top(), a[st.top()] + a[i]); } for(auto kveri : queries[i]){ res[kveri.ind] = (query(MAXN-kveri.l+1) <= kveri.val); } st.push(i); } for(int i=1; i<=m; i++) cout << res[i] << "\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...