#include<bits/stdc++.h>
using namespace std;
#define debug(...) 42
#define int long long
using ll = long long;
struct BIT{
vector<int> bit;
BIT(int n){bit = vector<int>(n + 1);}
void up(int k, int x){
k++;
for(; k; k -= k & -k){
bit[k] = max(bit[k], x);
}
}
int get(int k){
k++;
int ans = 0;
for (;k < bit.size(); k += k & -k){
ans = max(ans, bit[k]);
}
return ans;
}
};
void solve(){
int n, q;
cin >> n >> q;
vector<int> a(n + 1);
a[0] = 1e9 + 5;
for (int i = 1; i <= n; i++) cin >> a[i];
vector<int> to[n + 1];
vector<array<int, 3>> que;
for (int i = 0; i < q; i++){
int l, r, k;
cin >> l >> r >> k;
que.push_back({l, r, k});
to[r].push_back(i);
}
BIT bit(1e6);
vector<int> ans(q);
vector<int> st = {0};
for (int i = 1; i <= n; i++){
while(a[st.back()] <= a[i]) st.pop_back();
bit.up(st.back(), a[i] + a[st.back()]);
st.push_back(i);
for (auto idx : to[i]){
auto [l, r, k] = que[idx];
ans[idx] = bit.get(l) <= k;
}
}
for (auto x : ans) cout << x << "\n";
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int tt = 1;
// cin >> tt;
while(tt--) {
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... |