Submission #1219282

#TimeUsernameProblemLanguageResultExecution timeMemory
1219282boclobanchatHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
490 ms56528 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...