#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mxN = 4e6+10;
array<int, 2> st[mxN];
int lazy[mxN];
void build(int node, int l, int r, vector<int> &v) {
if(l == r) {
st[node] = {v[l], 0};
return ;
}
int mid = (l+r)/2;
build(node*2, l, mid, v);
build(node*2+1, mid+1, r, v);
st[node][0] = max(st[node*2][0], st[node*2+1][0]);
}
void push(int node, int l, int r) {
if(lazy[node] == 0) return;
if(l == r) return;
lazy[node*2] = max(lazy[node*2], lazy[node]);
st[node*2][1] = st[node*2][0]+lazy[node*2];
lazy[node*2+1] = max(lazy[node*2+1], lazy[node]);
st[node*2+1][1] = st[node*2+1][0]+lazy[node*2+1];
lazy[node] = 0;
}
void upd(int node, int l, int r, int l1, int r1, int val) {
push(node, l, r);
if(l1 <= l && r <= r1) {
st[node][1] = st[node][0]+val;
lazy[node] = val;
return ;
}
if(l1 > r || r1 < l) return ;
int mid = (l+r)/2;
upd(node*2, l, mid, l1, r1, val);
upd(node*2+1, mid+1, r, l1, r1, val);
st[node][1] = max(st[node*2][1], st[node*2+1][1]);
}
int qry(int node, int l, int r, int l1, int r1) {
if(l1 <= l && r <= r1) return st[node][1];
if(l1 > r || r1 < l) return -1;
int mid = (l+r)/2;
return max(qry(node*2, l, mid, l1, r1),
qry(node*2+1, mid+1, r, l1, r1));
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
vector<int> v(n);
for(int i = 0; i < n; i++) {
cin >> v[i];
}
build(1, 0, n-1, v);
stack<int> s;
vector<bool> ans(q);
vector<vector<array<int, 3>>> queries(n);
for(int i = 0; i < q; i++) {
int l, r, k;
cin >> l >> r >> k; --l; --r;
queries[l].push_back({r, k, i});
}
for(int l = n-1; l >= 0; l--) {
while(!s.empty() && v[s.top()] < v[l]) s.pop();
int b = s.empty() ? n : s.top();
s.push(l);
upd(1, 0, n-1, l+1, b-1, v[l]);
for(auto [r, k, i] : queries[l]) {
ans[i] = qry(1, 0, n-1, l, r) <= k;
}
}
for(int i = 0; i < q; 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... |