Submission #482778

#TimeUsernameProblemLanguageResultExecution timeMemory
482778luka1234Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
2742 ms107336 KiB
#include<bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
using namespace std;
int t[4000001];
int n,m;
int a[1000001];	
stack<int> st;
int ans[1000001];
vector<pair<pair<int,int>,pair<int,int> > >vec1;
int get(int v,int tl,int tr,int l,int r){
	if(l==tl&&r==tr){
		return t[v];
	}
	int m=(tl+tr)/2;
	if(r<=m)
	   return get(2*v,tl,m,l,r);
	else{
		if(l>m)
		   return get(2*v+1,m+1,tr,l,r);
		else
		   return max(get(2*v,tl,m,l,m),get(2*v+1,m+1,tr,m+1,r));
	}
}
void update(int v,int tl,int tr,int x,int p){
	if(tl==tr){
		t[v]=x;
	}
	else{
		int m=(tl+tr)/2;
		if(p<=m)
		   update(2*v,tl,m,x,p);
		else 
		   update(2*v+1,m+1,tr,x,p);
		   
		t[v]=max(t[2*v],t[2*v+1]);
	}
}
int main(){
	cin>>n>>m;
	for(int k=1;k<=n;k++){
		cin>>a[k];
	}
	vector<vector<int> > vec(n+1);
    for(int i=1;i<=n;i++){
        while(!st.empty()){
            int v=st.top();
            if(a[v]<=a[i])
			   st.pop();
            else 
			   break;
        }
        if(!st.empty()){
            int x=st.top();
            vec[x].push_back(i);
        }
        st.push(i);
    }
    
    for(int i=1;i<=m;i++){
        int l,r,x;
		cin>>l>>r>>x;
        vec1.push_back({{-l,r},{x,i}});
    }
    sort(vec1.begin(),vec1.end());
    int ind=0;
    for(int k=n;k>=1;k--){
        for(int pos:vec[k]){
            update(1,1,n,a[pos]+a[k],pos);
        }
        while(ind<m){
            int l=-vec1[ind].ff.ff;
            if(l!=k)
			   break;
            int r=vec1[ind].ff.ss;
            int pir=vec1[ind].ss.ff;
            int meo=vec1[ind].ss.ss;
            int x=get(1,1,n,l,r);
            if(x>pir)
			   ans[meo]=0;
            else 
			   ans[meo]=1;
            ind++;
        }
    }
    for(int k=1;k<=m;k++){
        cout<<ans[k]<<"\n";
    }
    return 0;
}
#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...