Submission #376233

#TimeUsernameProblemLanguageResultExecution timeMemory
376233ijxjdjdHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
1753 ms93840 KiB
#include <bits/stdc++.h> #define FR(i, N) for (int i = 0; i < int(N); i++) #define all(x) begin(x), end(x) using namespace std; using ll = long long; const int MAXN = (int)(1e6) + 5; struct Query { int l, i, k; }; int arr[MAXN]; bool ans[MAXN]; vector<Query> qs[MAXN]; int seg[4*MAXN]; void upd(int i, int val, int n = 1, int tl = 0, int tr = MAXN-1) { if (tl == tr) { seg[n] = val; } else { int tm = (tl + tr)/2; if (i <= tm) { upd(i, val, 2*n, tl, tm); } else { upd(i, val, 2*n+1, tm+1, tr); } seg[n] = max(seg[2*n], seg[2*n+1]); } } int query(int l, int r, int n = 1, int tl = 0, int tr = MAXN-1) { if (l > tr || r < tl) { return 0; } else if (l <= tl && tr <= r) { return seg[n]; } else { int tm = (tl + tr)/2; return max(query(l, r, 2*n, tl, tm), query(l, r, 2*n+1, tm+1, tr)); } } int main() { cin.tie(0); cin.sync_with_stdio(0); int N, M; cin >> N >> M; FR(i, N) cin >> arr[i]; deque<pair<int, int>> deq; deq.push_back({arr[0], 0}); FR(i, M) { int l, r, k; cin >> l >> r >> k; l--, r--; qs[r].push_back({l, i, k}); } for (int i = 0; i < N; i++) { while (deq.size() && deq.back().first <= arr[i]) { deq.pop_back(); } if (deq.size()) { upd(deq.back().second, deq.back().first+arr[i]); } deq.push_back({arr[i], i}); for (Query q : qs[i]) { ans[q.i] = (query(q.l, i) <= q.k); } } for (int i = 0; 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...