Submission #1306324

#TimeUsernameProblemLanguageResultExecution timeMemory
1306324domiHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
17 / 100
3102 ms189480 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second #define sz(a) (int)((a).size()) #define all(a) (a).begin(), (a).end() #define lsb(x) (x & (-x)) #define vi vector<int> #define YES { cout << "YES" << endl; return; } #define NO { cout << "NO" << endl; return; } using ll = long long; using pii = std::pair<int, int>; const int NMAX = 1e6; const int VMAX = 2e9; const int MAXNODES = 5e6; using namespace std; struct DynamicSeg { struct Node { int val = INT_MIN; Node *l, *r; }; Node* root; Node pool[MAXNODES + 5]; int ptr; Node* newNode() { return &pool[ptr++]; } DynamicSeg() : root(nullptr) {} void update(int pos, int val, Node*& nod, int st = 0, int dr = VMAX) { if (!nod) nod = newNode(); if (st == dr) { nod->val = val; return; } int m = (st + dr) >> 1; if (pos <= m) update(pos, val, nod->l, st, m); else update(pos, val, nod->r, m + 1, dr); nod->val = INT_MIN; if (nod->l) nod->val = max(nod->val, nod->l->val); if (nod->r) nod->val = max(nod->val, nod->r->val); } void update(int pos, int val) { update(pos, val, root); } int query(int l, int r, Node*& nod, int st = 0, int dr = VMAX) { if (!nod) return INT_MIN; if (l <= st && dr <= r) return nod->val; int m = (st + dr) >> 1; return max(query(l, r, nod->l, st, m), query(l, r, nod->r, m + 1, dr)); } int query(int l, int r) { return query(l, r, root); } }; vector<array<int, 3>>qu[NMAX + 5]; DynamicSeg aint; int a[NMAX + 5], ans[NMAX + 5], n, q; signed main() { cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> q; for (int i = 1; i <= n; ++i) cin >> a[i]; for (int i = 1, l, r, k; i <= q; ++i) { cin >> l >> r >> k; qu[r].push_back({l, k, i}); } stack<int>st; for (int i = 1; i <= n; ++i) { while (!st.empty() && a[i] >= a[st.top()]) st.pop(); int x = (st.empty() ? 0 : st.top()); aint.update(x, a[i] + a[x]); st.push(i); for (auto &[l, k, idx] : qu[i]) ans[idx] = (aint.query(l, n) <= k); } for (int i = 1; i <= q; ++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...