Submission #973404

#TimeUsernameProblemLanguageResultExecution timeMemory
973404colossal_pepeHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
923 ms98416 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; struct SGT { int n; vector<int> tree; SGT(int _n) { n = _n; tree.resize(4 * n, 0); } void update(int idx, int x) { for (tree[idx += n] = x; idx > 1; idx /= 2) { tree[idx / 2] = max(tree[idx], tree[idx^1]); } } int query(int l, int r) { int ret = 0; for (l += n, r += n; l <= r; l /= 2, r /= 2) { if (l % 2) ret = max(ret, tree[l++]); if (not (r % 2)) ret = max(ret, tree[r--]); } return ret; } }; int n, m; vector<int> a, ans; vector<pair<int, int>> q; vector<vector<int>> r2q; void solve() { ans.resize(m); SGT sgt = SGT(n); stack<int> st; for (int r = 0; r < n; r++) { while (not st.empty() and a[st.top()] <= a[r]) st.pop(); if (not st.empty()) sgt.update(st.top(), a[st.top()] + a[r]); st.push(r); for (int qi : r2q[r]) { auto [l, k] = q[qi]; ans[qi] = (k >= sgt.query(l, r)); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; a.resize(n); for (int &x : a) { cin >> x; } q.resize(m), r2q.resize(n); for (int i = 0; i < m; i++) { int l, r, k; cin >> l >> r >> k; l--, r--; q[i] = make_pair(l, k); r2q[r].push_back(i); } solve(); 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...