#include<bits/stdc++.h>
using namespace std;
struct query { int l,k,pos; };
const int MAXN=1e6+69;
vector<query> vq[MAXN];
int A[MAXN],nex[MAXN],fen[MAXN];
bool ans[MAXN];
stack<int> st;
void update(int i,int n,int val) { for(;i<=n;i+=i&-i) fen[i]=max(fen[i],val); }
int get(int i) { int ans=0;for(;i;i-=i&-i) ans=max(ans,fen[i]);return ans; }
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>A[i];
for(int i=1;i<=q;i++)
{
int l,r,k;
cin>>l>>r>>k;
vq[r].push_back({l,k,i});
}
for(int i=1;i<=n;i++)
{
while(!st.empty()&&A[i]>=A[st.top()]) st.pop();
if(!st.empty()) update(n-st.top()+1,n,A[st.top()]+A[i]);
st.push(i);
for(auto v:vq[i]) ans[v.pos]=(get(n-v.l+1)<=v.k);
}
for(int i=1;i<=q;i++) cout<<ans[i]<<"\n";
}
# | 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... |