Submission #1037071

#TimeUsernameProblemLanguageResultExecution timeMemory
1037071adaawfHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
860 ms137556 KiB
#include <iostream> #include <stack> #include <vector> using namespace std; int t[4000005], res[1000005], a[1000005]; vector<int> g[1000005]; struct QUERY { int r, x, num; }; vector<QUERY> v[1000005]; void update(int v, int tl, int tr, int l, int r, int x) { if (l > r) return; if (tl == l && tr == r) { t[v] = max(t[v], x); return; } t[v * 2] = max(t[v * 2], t[v]); t[v * 2 + 1] = max(t[v * 2 + 1], t[v]); int mid = (tl + tr) / 2; update(v * 2, tl, mid, l, min(r, mid), x); update(v * 2 + 1, mid + 1, tr, max(l, mid + 1), r, x); } int sum(int v, int tl, int tr, int x) { if (tl == tr) { return t[v]; } t[v * 2] = max(t[v * 2], t[v]); t[v * 2 + 1] = max(t[v * 2 + 1], t[v]); int mid = (tl + tr) / 2; if (mid >= x) return sum(v * 2, tl, mid, x); return sum(v * 2 + 1, mid + 1, tr, x); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q; cin >> n >> q; stack<pair<int, int>> s; for (int i = 1; i <= n; i++) { cin >> a[i]; while (!s.empty() && (s.top()).first <= a[i]) { s.pop(); } if (!s.empty()) { g[(s.top()).second].push_back(i); } s.push({a[i], i}); } for (int i = 1; i <= q; i++) { int l, r, k; cin >> l >> r >> k; v[l].push_back({r, k, i}); } for (int i = n; i >= 1; i--) { for (int w : g[i]) { update(1, 1, n, w, n, a[i] + a[w]); } for (auto w : v[i]) { if (sum(1, 1, n, w.r) <= w.x) { res[w.num] = 1; } } } for (int i = 1; i <= q; i++) cout << res[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...