#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
struct segtree {
int n;
vector<int> val;
segtree(int sz) {
n = 1;
while (n < sz) n *= 2;
val.resize(2 * n - 1);
}
void upd(int node, int l, int r, int i, int v) {
if (r == l + 1) {
val[node] = v;
return;
}
int m = (l + r) / 2;
if (i < m) upd(node * 2 + 1, l, m, i, v);
else upd(node * 2 + 2, m, r, i, v);
val[node] = max(val[node * 2 + 1], val[node * 2 + 2]);
}
void upd(int i, int v) {
upd(0, 0, n, i, v);
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m; cin >> n >> m;
vector<int> w(n);
for (int& i : w) cin >> i;
vector<bool> ans(m);
vector<vector<pair<int, pair<int, int>>>> qs(n);
for (int i = 0; i < m; ++i) {
int l, r, w; cin >> l >> r >> w;
qs[--r].push_back({--l, {w, i}});
}
vector<int> at(n);
for (int i = 0; i < n; ++i) {
for (int j = i - 1; j >= 0; --j) {
if (w[j] > w[i]) {
at[j] = w[j] + w[i];
break;
}
}
for (pair<int, pair<int, int>>& j : qs[i]) {
int mx = 0;
for (int k = j.first; k <= i; ++k) {
mx = max(mx, at[k]);
//cerr << at[k] << ' ';
}
//cerr << '\n';
ans[j.second.second] = (mx <= j.second.first);
}
}
for (int i = 0; i < m; ++i) {
cout << ans[i] << '\n';
}
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... |