Submission #146163

#TimeUsernameProblemLanguageResultExecution timeMemory
146163imeimi2000Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
926 ms100168 KiB
#include <iostream> #include <algorithm> #include <vector> #include <tuple> using namespace std; typedef pair<int, int> pii; struct _qs { int l, r, k, i; void scan(int idx) { i = idx; cin >> l >> r >> k; } bool operator<(const _qs &p) const { return l > p.l; } } qs[1000000]; bool ans[1000000]; int n, q; int W[1000001]; int fen[1000001]; void update(int i, int x) { while (i <= n) { fen[i] = max(fen[i], x); i += i & -i; } } int query(int i) { int r = 0; while (i) { r = max(r, fen[i]); i -= i & -i; } return r; } vector<int> R[1000001]; void add(int l, int r) { R[l].push_back(r); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> q; for (int i = 1; i <= n; ++i) cin >> W[i]; vector<int> st; for (int i = n; i > 0; --i) { while (!st.empty() && W[st.back()] < W[i]) { add(i, st.back()); st.pop_back(); } st.push_back(i); } for (int i = 0; i < q; ++i) qs[i].scan(i); sort(qs, qs + q); for (int i = 0, j = n + 1; i < q; ++i) { while (qs[i].l < j) { for (int k : R[--j]) { update(k, W[j] + W[k]); } } ans[qs[i].i] = query(qs[i].r) <= qs[i].k; } for (int i = 0; i < q; ++i) printf("%d\n", (int)ans[i]); 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...