Submission #167230

#TimeUsernameProblemLanguageResultExecution timeMemory
167230apostoldaniel854Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
963 ms94980 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define dbg(x) cerr << #x << " " << x << "\n" typedef long long ll; int n, m; const int N = 1e6; int w[1 + N]; int stk[1 + N]; vector <int> op[1 + N]; void prec () { int top = 0; for (int i = 1; i <= n; i++) { while (top && w[stk[top]] <= w[i]) top--; if (top) op[stk[top]].pb (i); stk[++top] = i; } } struct Query { int l; int r; int mood; int index; }; Query q[1 + N]; bool cmp (Query a, Query b) { return a.l > b.l; } int lsb (int x) { return x & -x; } int aib[1 + N]; int ans[1 + N]; void upd (int pos, int val) { while (pos <= n) { aib[pos] = max (aib[pos], val); pos += lsb (pos); } } int qry (int pos) { int ans = 0; while (pos) { ans = max (ans, aib[pos]); pos -= lsb (pos); } return ans; } int main () { ios::sync_with_stdio (false); cin.tie (0); cout.tie (0); cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> w[i]; } prec (); for (int i = 1; i <= m; i++) { cin >> q[i].l >> q[i].r >> q[i].mood; q[i].index = i; } sort (q + 1, q + m + 1, cmp); int l = n; for (int i = 1; i <= m; i++) { while (l >= q[i].l) { for (auto x : op[l]) upd (x, w[x] + w[l]); l--; } ans[q[i].index] = (qry (q[i].r) <= q[i].mood); } for (int i = 1; i <= m; i++) cout << ans[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...