Submission #728196

#TimeUsernameProblemLanguageResultExecution timeMemory
728196hmm789Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
1493 ms215932 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define MOD 998244353 #define INF 1000000000000000000 #define EPS 1e-10 struct node { int s, e, m, v; node *l, *r; node(int _s, int _e) { s = _s, e = _e, m = (s+e)/2, v = 0; if(s != e) { l = new node(s, m); r = new node(m+1, e); } } void update(int x, int val) { if(s == e) {v = val; return;} else if(x > m) r->update(x, val); else l->update(x, val); v = max(l->v, r->v); } int rmax(int x, int y) { if(x <= s && e <= y) return v; else if(x > m) return r->rmax(x, y); else if(y <= m) return l->rmax(x, y); else return max(l->rmax(x, y), r->rmax(x, y)); } } *root; int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, l, r, k, idx; cin >> n >> m; root = new node(0, n-1); int a, ans[m]; pair<int, int> p[n]; tuple<int, int, int, int> qry[m]; stack<pair<int, int>> s; for(int i = 0; i < n; i++) { cin >> a; while(s.size() && s.top().first <= a) s.pop(); if(s.size()) p[i] = {s.top().second, s.top().first+a}; else p[i] = {i, 0}; s.push({a, i}); } for(int i = 0; i < m; i++) { cin >> l >> r >> k; l--; r--; qry[i] = {r, l, k, i}; } sort(qry, qry+m); int cur = 0; for(int i = 0; i < m; i++) { tie(r, l, k, idx) = qry[i]; while(cur <= r) { root->update(p[cur].first, p[cur].second); cur++; } ans[idx] = root->rmax(l, r) <= k; } for(int i = 0; i < m; i++) cout << ans[i] << '\n'; }
#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...