제출 #1341347

#제출 시각아이디문제언어결과실행 시간메모리
1341347tte0Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
830 ms53268 KiB
// Author: Teoman Ata Korkmaz
#pragma GCC optimize("O3,unroll-loops,inline,no-stack-protector")
#include <bits/stdc++.h> 
#define int int32_t
using namespace std;
struct segtree{
	struct Node{
		int mn;
		int mx;
		int ans;
	};
	int n;
	vector<Node> st;
	segtree(const vector<int>& v){
		n=v.size();
		st.resize(4*n);
		build(1,n,1,v);
	}
	Node merge(const Node& l,const Node& r){
		return {
			.mn=min(l.mn,r.mn),
			.mx=max(l.mx,r.mx),
			.ans=max({l.ans,r.ans,l.mx-r.mn})
		};
	}
	void build(int l,int r,int node,const vector<int>& v){
		if(l==r){
			st[node]={
				.mn=v[l-1],
				.mx=v[l-1],
				.ans=0
			};
			return;
		}
		int m=(l+r)/2;
		build(l,m,node<<1,v);
		build(m+1,r,node<<1|1,v);
		st[node]=merge(st[node<<1],st[node<<1|1]);
	}
	Node query(int l,int r,int node,int qx,int qy){
		if(qx<=l && r<=qy)return st[node];
		if(qy<l || r<qx)return {
			.mn=1'010'000'000,
			.mx=-1'010'000'000,
			.ans=-1'010'000'000
		};
		int m=(l+r)/2;
		return merge(
			query(l,m,node<<1,qx,qy),
			query(m+1,r,node<<1|1,qx,qy)
		);
	}
	int query(int l,int r){
		return query(1,n,1,l,r).ans;
	}
};
///////////////////////////////////////////////////////////
int n,q;
vector<int> v;

signed main(void){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

    cin>>n>>q;
	v.resize(n);
	for(int& i:v)cin>>i;

	segtree st(v);

	while(q--){
		int x,y,z;
		cin>>x>>y>>z;
		cout<<(st.query(x,y)>z ? '0' : '1')<<'\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...