Submission #837936

#TimeUsernameProblemLanguageResultExecution timeMemory
837936MODDIHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
2694 ms104780 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef pair<long long, long long> pll;
typedef pair<int,int> pii;
typedef vector<long long> vl;
typedef vector<int> vi;
int n, m;
vi arr;
const int MXN = 1e6+5;
vector<array<int, 3>> queries[MXN];
bool comp(array<int, 3>& a, array<int, 3>& b){
	return a[0] < b[0];
}
int tree[4 * MXN], lazy[4 * MXN];
void push(int node, int l, int r){
	if(lazy[node] == 0)	return;
	tree[node] = max(tree[node], lazy[node]);
	if(l != r){
		lazy[node*2] = max(lazy[node*2], lazy[node]);
		lazy[node*2+1] = max(lazy[node*2+1], lazy[node]);
	}
	lazy[node] = 0;
}
void update(int node, int l, int r, int L, int R, int val){
	push(node, l, r);
	if(r < L || l > R)	return;
	if(L <= l && r <= R){
		lazy[node] = max(lazy[node], val);
		push(node, l, r);
		return;
	}
	int mid = (l + r) / 2;
	update(node*2, l, mid, L, R, val);
	update(node*2+1, mid+1, r, L, R, val);
	tree[node] = max(tree[node*2], tree[node*2+1]);
}
int query(int node, int l, int r, int L, int R){
	push(node, l, r);
	if(r < L || l > R)	return 0;
	if(L <= l && r <= R)	return tree[node];
	int mid = (l + r) / 2;
	return max(query(node*2, l, mid, L, R), query(node*2+1, mid+1, r, L, R));
}
int main(){
	cin>>n>>m;
	arr.resize(n);
	for(int i = 0; i < n; i++)	cin>>arr[i];
	
	vi ans(m);
	for(int i = 0; i < m; i++){
		int l, r, k;
		cin>>l>>r>>k;
		l--;
		r--;
		queries[r].pb({l, k, i});
	}
	stack<int> store;
	for(int i = 0; i < n; i++){
		while(!store.empty() && arr[store.top()] <= arr[i])
			store.pop();
		if(!store.empty()){
			update(1, 0, n-1, 1, store.top(), arr[i] + arr[store.top()]);
		}
		for(auto t : queries[i]){
			int l = t[0];
			int k = t[1];
			int id = t[2];
			if(query(1, 0, n-1, l, i) <= k)
				ans[id] = 1;
			else
				ans[id] = 0;
		}
		store.push(i);
	}
	for(auto t : ans)
		cout<<t<<"\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...