제출 #1356754

#제출 시각아이디문제언어결과실행 시간메모리
1356754husuuuHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
1325 ms43060 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define IO ios::sync_with_stdio(false); cin.tie(0);

struct Node {
    ll mx1, mx2;
};

Node merge(Node a, Node b) {
    vector<ll> v = {a.mx1, a.mx2, b.mx1, b.mx2};
    sort(v.begin(), v.end(), greater<ll>());
    return {v[0], v[1]};
}

const int MAXN = 1e6 + 5;
Node seg[4 * MAXN];
ll a[MAXN];

void build(int idx, int l, int r) {
    if (l == r) {
        seg[idx] = {a[l], 0};
        return;
    }
    int mid = (l + r) / 2;
    build(idx*2, l, mid);
    build(idx*2+1, mid+1, r);
    seg[idx] = merge(seg[idx*2], seg[idx*2+1]);
}

Node query(int idx, int l, int r, int ql, int qr) {
    if (qr < l || r < ql) return {0, 0};
    if (ql <= l && r <= qr) return seg[idx];

    int mid = (l + r) / 2;
    return merge(
        query(idx*2, l, mid, ql, qr),
        query(idx*2+1, mid+1, r, ql, qr)
    );
}

int main() {
    IO;

    int n, q;
    cin >> n >> q;

    for (int i = 1; i <= n; i++) cin >> a[i];

    build(1, 1, n);

    while (q--) {
        int l, r;
        ll k;
        cin >> l >> r >> k;

        Node res = query(1, 1, n, l, r);

        if (res.mx1 + res.mx2 <= k) cout << 1 << '\n';
        else cout << 0 << '\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...