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...