Submission #681044

#TimeUsernameProblemLanguageResultExecution timeMemory
681044Matteo_VerzHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1991 ms79004 KiB
#include <iostream> #include <vector> #include <stack> #include <algorithm> using namespace std; struct Query { int l, r, w, idx, ans; }; class SegTree { // Update: max= on element // Query: max on interval private: vector <int> a; int n; void _update(int node, int l, int r, int pos, int val) { if (l == r) a[node] = max(a[node], val); else { int mid = (l + r) >> 1; if (pos <= mid) _update(node << 1, l, mid, pos, val); else _update(node << 1 | 1, mid + 1, r, pos, val); a[node] = max(a[node << 1], a[node << 1 | 1]); } } int _query(int node, int l, int r, int x, int y) { if (x <= l && r <= y) return a[node]; int mid = (l + r) >> 1, ans = 0; if (x <= mid) ans = max(ans, _query(node << 1, l, mid, x, y)); if (mid < y) ans = max(ans, _query(node << 1 | 1, mid + 1, r, x, y)); return ans; } public: SegTree(int _n) : n(_n) { a.resize(1 + 4 * _n); } void update(int pos, int value) { _update(1, 0, n - 1, pos, value); } int query(int l, int r) { return _query(1, 0, n - 1, l, r); } }; int main() { int n, k; cin >> n >> k; vector <int> v(n); vector <Query> q(k); for (int i = 0; i < n; i++) cin >> v[i]; for (int i = 0; i < k; i++) { cin >> q[i].l >> q[i].r >> q[i].w; q[i].l--; q[i].r--; q[i].idx = i; } sort(q.begin(), q.end(), [](Query a, Query b) { return a.r < b.r; }); vector <int> rightpos(n, -1); stack <int> st; int j = 0; SegTree aint(n); for (int i = 0; i < n; i++) { while (st.size() && v[i] >= v[st.top()]) st.pop(); if (st.size()) { rightpos[st.top()] = i; aint.update(st.top(), v[st.top()] + v[i]); } st.push(i); while (j < k && q[j].r == i) { q[j].ans = aint.query(q[j].l, q[j].r); j++; } } sort(q.begin(), q.end(), [](Query a, Query b) { return a.idx < b.idx; }); for (auto qi : q) { // cerr << qi.ans << '\n'; if (qi.ans > qi.w) cout << 0 << '\n'; else cout << 1 << '\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...