제출 #336737

#제출 시각아이디문제언어결과실행 시간메모리
336737amunduzbaevHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
100 / 100
1520 ms43260 KiB
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define ub upper_bound
#define lb lower_bound
#define ll long long 
#define ld long double 
#define pii pair<int, int>
#define pll pair<ll, ll>
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(),x.rend()
#define prc(n) fixed << setprecision(n)
#define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pi acos(-1);
const int inf = 1e9+7;
const int N = 1e6+5;
int n, m, aaa[N], s, a[N];

vector<int>tree;

int find(int l, int r, int lx, int rx, int x){
	if(lx > r || rx < l) return 0;
	if(lx >= l && rx <= r) return tree[x];
	int m = (lx + rx)/2;
	return max(find(l, r, lx, m, x*2), find(l, r, m+1, rx, x*2+1));
}

void update(int i, int v, int lx, int rx, int x){
	if(lx == rx){ tree[x] = v; return; }
	int m = (lx + rx)/2;
	if(i <= m) update(i, v, lx, m, x*2);
	else update(i, v, m+1, rx, x*2+1);
	tree[x] = max(tree[x*2], tree[x*2+1]);
}

void print(){
	for(int i=1;i<2*s;i++) cout<<tree[i]<<" ";
	cout<<endl;
}

void solve(){
	cin>>n>>m;
	s = 2;
	while(s < n) s<<=1;
	tree.resize(s*2, 0);
	for(int i=0;i<n;i++) cin>>a[i];
	vector<pair<pii, pii>> vv;
	for(int i=0;i<m;i++){
		int l, r, k;
		cin>>l>>r>>k;
		vv.pb({{r, l}, {k, i}});
	}
	
	sort(all(vv));
	vector<pii>ans;
	int last = 0;
	for(int i=0;i<n;i++){
		while(!ans.empty() && ans.back().ff < a[i]) ans.pop_back();
		
		bool flag = 0;
		if(ans.empty()){
			ans.pb({a[i], i+1});
			flag = 1;
		}
		
		int x = ans.back().ff, y = ans.back().ss;
		if(!flag) 	ans.pb({a[i], i+1});
		if(x > a[i])
			update(y, a[i] + x, 1, s, 1);
		
		while(last < m && vv[last].ff.ff == i+1){
			int res = find(vv[last].ff.ss, vv[last].ff.ff, 1, s, 1);
			aaa[vv[last].ss.ss] = (vv[last].ss.ff >= res);
			last++;
		}
		if(last == m) break;
	}
	//print();
	for(int i=0;i<m;i++) cout<<aaa[i]<<"\n";
	
}
 
signed main(){
	fastios
	int t = 1;
	//cin>>t;
	while(t--) solve();
	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...