/**
* author : Lăng Trọng Đạt
* created: 03-08-2025
**/
#include <bits/stdc++.h>
using namespace std;
#ifndef LANG_DAT
#define db(...) ;
#endif // LANG_DAT
#define int long long
#define f first
#define se second
#define pb push_back
#define all(v) (v).begin(), (v).end()
#define FOR(i, a, b) for (int i = (a); (i) <= (b); (i++))
#define FD(i, lo, up) for (int i = (up); (i) >= (lo); i--)
#define si(x) (int)(x.size())
bool mx(int& a, int b) { if (b > a) {a = b; return true;} return false;}
bool mi(int& a, int b) { if (b < a) {a = b; return true;} return false;}
using pii = pair<int, int>;
using vi = vector<int>;
const int INF = 1e18 + 5;
const int MOD = 1e9 + 7;
const int N = 1e6 + 5;
int g[N];
bool ans[N];
int n, m, k, q, a, b, c;
// int st[4*N];
// void upd(int pos, int val, int v = 1, int l = 1, int r = n) {
// if (l > pos or pos > r) return;
// else if (l == r) {
// mx(st[v], val);
// } else {
// int mid = (l + r) / 2;
// int
// }
// }
int BIT[N];
void upd(int pos, int val) {
for (; pos <= n; pos += pos & -pos) mx(BIT[pos], val);
}
int get(int up) {
int res = 0;
for (int p = up; p > 0; p -= p & -p) mx(res, BIT[p]);
return res;
}
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
if (fopen("hi.inp", "r")) {
freopen("hi.inp", "r", stdin);
// freopen("hi.out", "w", stdout);
}
cin >> n >> q;
FOR(i, 1, n) {
cin >> g[i];
}
vector<vi> p;
stack<int> big;
FOR(i, 1, n) {
while (!big.empty() && g[big.top()] <= g[i]) big.pop();
if (!big.empty()) p.push_back({big.top(), i, g[big.top()] + g[i]});
big.push(i);
}
FOR(i, 1, q) {
cin >> a >> b >> k;
p.push_back({a, b, k, i});
// int prv = g[a];
// bool ans = true;
// FOR(i, a + 1, b) {
// if (g[i] < prv && g[i] + prv > k) ans = false;
// mx(prv, g[i]);
// }
// cout << ans << "\n";
}
sort(all(p), [](vi& a, vi& b) -> bool { // {x, y, sum, id (for query)}
if (a[0] == b[0]) {
if (a[1] == b[1]) return si(a) < si(b);
return a[1] < b[1];
}
return a[0] > b[0];
});
for (auto v : p) {
if (si(v) == 3) {
upd(v[1], v[2]);
} else {
ans[v[3]] = get(v[1]) <= v[2];
}
}
FOR(i, 1, q) cout << ans[i] << "\n";
}
Compilation message (stderr)
sortbooks.cpp: In function 'int32_t main()':
sortbooks.cpp:53:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
53 | freopen("hi.inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# | 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... |