Submission #1304791

#TimeUsernameProblemLanguageResultExecution timeMemory
1304791michael12Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
757 ms49684 KiB
#include <bits/stdc++.h> using namespace std; const long long INF = 1e18; struct SegmentTree { int n; vector<long long> tree; SegmentTree(vector<long long>& data) { n = data.size(); tree.resize(4 * n); build(1, 0, n - 1, data); } void build(int node, int l, int r, vector<long long>& data) { if (l == r) { tree[node] = data[l]; return; } int mid = (l + r) / 2; build(node * 2, l, mid, data); build(node * 2 + 1, mid + 1, r, data); tree[node] = max(tree[node * 2], tree[node * 2 + 1]); } long long query(int node, int l, int r, int ql, int qr) { if (qr < l || r < ql) return -INF; if (ql <= l && r <= qr) return tree[node]; int mid = (l + r) / 2; return max( query(node * 2, l, mid, ql, qr), query(node * 2 + 1, mid + 1, r, ql, qr) ); } long long query(int l, int r) { return query(1, 0, n - 1, l, r); } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; cin >> N >> M; vector<long long> w(N); for (int i = 0; i < N; i++) { cin >> w[i]; } vector<long long> bad(N, 0); stack<long long> st; for (int i = N - 1; i >= 0; i--) { while (!st.empty() && st.top() >= w[i]) { st.pop(); } if (!st.empty()) { bad[i] = w[i] + st.top(); } st.push(w[i]); } SegmentTree seg(bad); while (M--) { int l, r; long long k; cin >> l >> r >> k; l--; r--; long long mx = seg.query(l, r); cout << (mx <= k ? 1 : 0) << '\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...