제출 #1326224

#제출 시각아이디문제언어결과실행 시간메모리
1326224gustavo_dHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
1304 ms68664 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define sc second const int MAXN = 1e6; const int INF = 1e9; bool ans[MAXN]; int arr[MAXN]; vector<tuple<int, int, int>> queries[MAXN]; struct Node { int mx, lzSum; Node (int _mx=0, int _lzSum=0): mx(_mx), lzSum(_lzSum) {} Node operator+(Node right) { Node left = *this; return Node(max(left.mx, right.mx)); } }; struct Seg { vector<Node> seg; int n; Seg(int _n=0) { n = 1; while (n < _n) n <<= 1; seg = vector<Node> (2*n); } int getLeft(int v) { return 2*v; } int getRight(int v) { return 2*v+1; } void propagate(int v) { if (seg[v].lzSum == 0) return; if (v < n) { seg[getLeft(v)].lzSum += seg[v].lzSum; seg[getRight(v)].lzSum += seg[v].lzSum; } seg[v].mx += seg[v].lzSum; seg[v].lzSum = 0; } Node rng(int v, int l, int r, int a, int b) { propagate(v); if (a <= l and r <= b) return seg[v]; if (r < a or b < l) return Node(); int m = (l + r) / 2; return rng(getLeft(v), l, m, a, b) + rng(getRight(v), m+1, r, a, b); } void add(int v, int l, int r, int a, int b, int x) { propagate(v); if (a <= l and r <= b) { seg[v].lzSum += x; propagate(v); return; } if (r < a or b < l) return; int m = (l + r) / 2; add(getLeft(v), l, m, a, b, x); add(getRight(v), m+1, r, a, b, x); seg[v] = seg[getLeft(v)] + seg[getRight(v)]; } }; int main() { cin.tie(0)->sync_with_stdio(false); int n, qs; cin >> n >> qs; for (int i=0; i<n; i++) cin >> arr[i]; for (int q=0; q<qs; q++) { int l, r, x; cin >> l >> r >> x; l--; r--; queries[r].emplace_back(l, x, q); } Seg seg(n); vector<pair<int, int>> inc; inc.emplace_back(-INF, -1); for (int i=0; i<n; i++) { while (inc.back().fi > arr[i]) { int j = inc.back().sc; inc.pop_back(); int k = inc.back().sc; seg.add(1, 0, seg.n-1, k+1, j, arr[j] - arr[i]); } inc.emplace_back(arr[i], i); for (auto [l, x, q] : queries[i]) { ans[q] = seg.rng(1, 0, seg.n-1, l, i).mx <= x; } } for (int i=0; i<qs; 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...