Submission #1283600

#TimeUsernameProblemLanguageResultExecution timeMemory
1283600petezaHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
2912 ms191720 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int mxn = 1e6+5; int segm[mxn*4]; vector<int> segvec[mxn*4]; int n, m, arr[mxn], a, b, c; void dfsseg(int idx, int l, int r) { for(int i=l;i<=r;i++) { segvec[idx].push_back(arr[i]); } if(l == r) return; sort(segvec[idx].begin(), segvec[idx].end()); int mid = (l+r) >> 1; dfsseg(idx*2+1, l, mid); dfsseg(idx*2+2, mid+1, r); segm[idx] = max(segm[idx*2+1], segm[idx*2+2]); auto it = lower_bound(segvec[idx*2+2].begin(), segvec[idx*2+2].end(), segvec[idx*2+1].back()); if(it != segvec[idx*2+2].begin()) { it--; segm[idx] = max(segm[idx], *it + segvec[idx*2+1].back()); } } int cmx = 0; int cval = -1000000000; void qr(int idx, int l, int r, int tl, int tr) { if(tr < l || r < tl) return ; if(tl <= l && r <= tr) { cmx = max(cmx, segm[idx]); auto it = lower_bound(segvec[idx].begin(), segvec[idx].end(), cval); if(it != segvec[idx].begin()) { it--; cmx = max(cmx, *it + cval); } cval = max(cval, segvec[idx].back()); return ; } int mid = (l+r) >> 1; qr(idx*2+1, l, mid, tl, tr); qr(idx*2+2, mid+1, r, tl, tr); } int main() { cin.tie(0) -> sync_with_stdio(0); cin >> n >> m; for(int i=1;i<=n;i++) cin >> arr[i]; dfsseg(0, 1, n); while(m--) { cin >> a >> b >> c; cmx = 0; cval = -1000000000; qr(0, 1, n, a, b); cout << (cmx <= c) << '\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...