#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
const int N = 1e6 + 100;
int n, q, a[N];
int t[N * 4], t2[N * 4];
vector<int> g[N * 4];
// Построение сегментного дерева
void build(int v, int l, int r) {
    if (l == r) {
        t[v] = a[l];
        g[v] = {a[l]};
        t2[v] = -1e9;
        return;
    }
    int m = (l + r) >> 1;
    build(v << 1, l, m);
    build(v << 1 | 1, m + 1, r);
    auto &L = g[v << 1];
    auto &R = g[v << 1 | 1];
    g[v].resize(L.size() + R.size());
    merge(L.begin(), L.end(), R.begin(), R.end(), g[v].begin());
    t[v] = max(t[v << 1], t[v << 1 | 1]);
    t2[v] = max(t2[v << 1], t2[v << 1 | 1]);
    int leftMax = t[v << 1];
    int pos = upper_bound(R.begin(), R.end(), leftMax - 1) - R.begin() - 1;
    if (pos >= 0)
        t2[v] = max(t2[v], leftMax + R[pos]);
}
// Запрос: возвращает {максимум, лучшая пара}
pair<int, int> get(int v, int l, int r, int ql, int qr) {
    if (qr < l || r < ql)
        return {-1e9, -1e9};
    if (ql <= l && r <= qr)
        return {t[v], t2[v]};
    int m = (l + r) >> 1;
    auto L = get(v << 1, l, m, ql, qr);
    auto R = get(v << 1 | 1, m + 1, r, ql, qr);
    int mx = max(L.first, R.first);
    int best = max(L.second, R.second);
    // если максимум слева > минимум справа
    if (L.first != -1e9 && R.first != -1e9) {
        // ищем в правом подотрезке число < L.first
        auto &vecR = g[v << 1 | 1];
        int pos = upper_bound(vecR.begin(), vecR.end(), L.first - 1) - vecR.begin() - 1;
        if (pos >= 0)
            best = max(best, L.first + vecR[pos]);
    }
    return {mx, best};
}
void solve() {
    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;
        if (l == r) {
            cout << 1 << "\n";
            continue;
        }
        auto res = get(1, 1, n, l, r);
        cout << (res.second <= k ? 1 : 0) << "\n";
    }
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |