제출 #1242799

#제출 시각아이디문제언어결과실행 시간메모리
1242799ssitaramHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1221 ms63992 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; struct segtree { int n; vector<int> val; segtree(int sz) { n = 1; while (n < sz) n *= 2; val.resize(2 * n - 1); } void upd(int node, int l, int r, int i, int v) { if (r == l + 1) { val[node] = v; return; } int m = (l + r) / 2; if (i < m) upd(node * 2 + 1, l, m, i, v); else upd(node * 2 + 2, m, r, i, v); val[node] = max(val[node * 2 + 1], val[node * 2 + 2]); } void upd(int i, int v) { upd(0, 0, n, i, v); } int mx(int node, int l, int r, int a, int b) { if (r <= a || l >= b) return 0; if (a <= l && r <= b) return val[node]; int m = (l + r) / 2; return max(mx(node * 2 + 1, l, m, a, b), mx(node * 2 + 2, m, r, a, b)); } int mx(int a, int b) { return mx(0, 0, n, a, b); } int lastg(int node, int l, int r, int i, int v) { if (r == l + 1) return (val[node] > v ? l : -1); if (l >= i) return -1; int m = (l + r) / 2; if (val[node * 2 + 2] > v) { int ans = lastg(node * 2 + 2, m, r, i, v); if (ans != -1) return ans; } return lastg(node * 2 + 1, l, m, i, v); } int lastg(int i) { return lastg(0, 0, n, i, mx(i, i + 1)); } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; segtree w(n); for (int i = 0; i < n; ++i) { int v; cin >> v; w.upd(i, v); } vector<bool> ans(m); vector<vector<pair<int, pair<int, int>>>> qs(n); for (int i = 0; i < m; ++i) { int l, r, w; cin >> l >> r >> w; qs[--r].push_back({--l, {w, i}}); } segtree at(n); for (int i = 0; i < n; ++i) { int j = w.lastg(i); if (j != -1) at.upd(j, w.mx(j, j + 1) + w.mx(i, i + 1)); for (pair<int, pair<int, int>>& j : qs[i]) { ans[j.second.second] = (at.mx(j.first, i + 1) <= j.second.first); } } 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...