제출 #878872

#제출 시각아이디문제언어결과실행 시간메모리
878872OAleksaHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
1223 ms125944 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define f first #define s second const int maxn = 1e6 + 69; int n, q, a[maxn], st[4 * maxn], ans[maxn]; vector<tuple<int, int, int>> g[maxn]; void upd(int v, int tl, int tr, int p, int x) { if (tl == tr) st[v] = max(st[v], x); else { int mid = (tl + tr) / 2; if (p <= mid) upd(v * 2, tl, mid, p, x); else upd(v * 2 + 1, mid + 1, tr, p, x); st[v] = max(st[v * 2], st[v * 2 + 1]); } } int qry(int v, int tl, int tr, int l, int r) { if (tl > r || tr < l) return 0; else if (tl >= l && tr <= r) return st[v]; else { int mid = (tl + tr) / 2; return max(qry(v * 2, tl, mid, l, r), qry(v * 2 + 1, mid + 1, tr, l, r)); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tt = 1; //cin >> tt; while (tt--) { cin >> n >> q; for (int i = 1;i <= n;i++) cin >> a[i]; vector<int> stck; for (int i = 1;i <= q;i++) { int l, r, k; cin >> l >> r >> k; g[r].push_back({l, k, i}); } for (int i = 1;i <= n;i++) { while (!stck.empty() && a[stck.back()] <= a[i]) stck.pop_back(); if (!stck.empty()) upd(1, 1, n, stck.back(), a[i] + a[stck.back()]); for (auto u : g[i]) { int l, k, ind; tie(l, k, ind) = u; ans[ind] = (qry(1, 1, n, l, i) <= k); } stck.push_back(i); } 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...