Submission #1165652

#TimeUsernameProblemLanguageResultExecution timeMemory
1165652yellowtoadHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
34 / 100
147 ms24096 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; int n, q, a[100010], maxx[400010], cur; vector<int> node[400010]; int search(int id, int x) { int l = 0, r = node[id].size()-1; while (l <= r) { int mid = (l+r)/2; if (node[id][mid] >= x) r = mid-1; else l = mid+1; } if (r >= 0) return x+node[id][r]; else return 0; } void build(int id, int x, int y) { if (x == y) { node[id].push_back(a[x]); return; } int mid = (x+y)/2; build(id*2,x,mid); build(id*2+1,mid+1,y); maxx[id] = max(max(maxx[id*2],maxx[id*2+1]),search(id*2+1,node[id*2].back())); for (int i = 0; i < node[id*2].size(); i++) node[id].push_back(node[id*2][i]); for (int i = 0; i < node[id*2+1].size(); i++) node[id].push_back(node[id*2+1][i]); sort(node[id].begin(),node[id].end()); } int query(int id, int x, int y, int l, int r) { if ((l <= x) && (y <= r)) { int tmp = search(id,cur); cur = max(cur,node[id].back()); return max(tmp,maxx[id]); } if ((y < l) || (r < x)) return 0; int mid = (x+y)/2, tmp = query(id*2,x,mid,l,r), tnp = query(id*2+1,mid+1,y,l,r); return max(tmp,tnp); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q; for (int i = 1; i <= n; i++) cin >> a[i]; build(1,1,n); while (q--) { int l, r, k; cin >> l >> r >> k; cur = 0; cout << (query(1,1,n,l,r) <= k) << "\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...