Submission #959807

#TimeUsernameProblemLanguageResultExecution timeMemory
959807pccHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
64 / 100
3035 ms246272 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pll pair<ll,ll>
#define pii pair<int,int>
#define fs first
#define sc second
#define tlll tuple<ll,ll,ll>

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,popcnt,sse4")

const int mxn = 1e6+10;
int arr[mxn];
int N,Q;

struct SEG{
#define mid ((l+r)>>1)
#define ls now*2+1
#define rs now*2+2
	int val[mxn*4];
	int mx[mxn*4];
	vector<int> seg[mxn*4];
	SEG(){}
	void build(int now,int l,int r){
		for(int i = l;i<=r;i++)seg[now].push_back(arr[i]);
		sort(seg[now].begin(),seg[now].end());
		mx[now] = seg[now].back();
		if(l == r)return;
		build(ls,l,mid);
		build(rs,mid+1,r);
		val[now] = max(val[ls],val[rs]);
		auto lp = lower_bound(seg[rs].begin(),seg[rs].end(),seg[ls].back());
		if(lp != seg[rs].begin())val[now] = max(val[now],seg[ls].back()+*prev(lp));
		return;
	}
	pii getval(int now,int l,int r,int s,int e,int big = 0){
		if(l>=s&&e>=r){
			pii re;
			re.fs = val[now];
			auto lp = lower_bound(seg[now].begin(),seg[now].end(),big);
			if(lp != seg[now].begin())re.fs = max(re.fs,big+*prev(lp));
			re.sc = max(big,mx[now]);
			return re;
		}
		if(mid>=e)return getval(ls,l,mid,s,e,big);
		else if(mid<s)return getval(rs,mid+1,r,s,e,big);
		else{
			auto re = getval(ls,l,mid,s,e,big);
			auto tmp = getval(rs,mid+1,r,s,e,re.sc);
			return pii(max(re.fs,tmp.fs),max(re.sc,tmp.sc));
		}
	}
#undef ls
#undef rs 
#undef mid
};

SEG seg;

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N>>Q;
	for(int i = 1;i<=N;i++)cin>>arr[i];
	seg.build(0,1,N);
	while(Q--){
		int s,e,v;
		cin>>s>>e>>v;
		int re = seg.getval(0,1,N,s,e).fs;
		cout<<(re<=v)<<'\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...