// - Art -
#include <bits/stdc++.h>
#define el cout << '\n'
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define REP(i, c) for (int i = 0, _c = (c); i < _c; ++i)
const int N = 1e6 + 7;
template <class T1, class T2>
bool maximize(T1 &a, T2 b) {
if (a < b) {a = b; return true;}
return false;
}
template <class T1, class T2>
bool minimize(T1 &a, T2 b) {
if (a > b) {a = b; return true;}
return false;
}
using namespace std;
struct FenwickTree {
int n;
vector<int> bit;
FenwickTree(int _n) : n(_n), bit(_n + 7) {}
void update(int u, int add) {
for (; u > 0; u -= u & -u) {
maximize(bit[u], add);
}
}
int get(int u) {
int res = 0;
for (; u <= n; u += u & -u) {
maximize(res, bit[u]);
}
return res;
}
};
int a[N];
bool ans[N];
vector<tuple<int, int, int>> query[N];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, q;
cin >> n >> q;
FOR (i, 1, n) {
cin >> a[i];
}
FOR(i , 1 , q) {
int l, r, k;
cin >> l >> r >> k;
query[r].emplace_back(l , k , i);
}
stack <int> st;
FenwickTree fen(n);
FOR(i , 1 , n){
while (!st.empty() && a[st.top()] <= a[i]) {
st.pop();
}
if (!st.empty()) {
fen.update(st.top(), a[st.top()] + a[i]);
}
st.emplace(i);
for (auto &[l, k, id] : query[i]) {
ans[id] = fen.get(l) <= k;
}
}
FOR (i, 1, q) {
cout << ans[i], el;
}
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... |