제출 #709939

#제출 시각아이디문제언어결과실행 시간메모리
709939WonderfulWhaleHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
997 ms147912 KiB
#include<bits/stdc++.h>
using namespace std;
#define int int64_t
#define pb push_back
#define pii pair<int, int>
#define st first
#define nd second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
struct SegTree {
	const static int T = 1<<20;
	int t[2*T];
	void update(int x, int val) {
		x+=T;
		t[x] = max(t[x], val);
		x/=2;
		while(x) {
			t[x] = max(t[2*x], t[2*x+1]);
			x/=2;
		}
	}
	int query(int l, int r) {
		l+=T;
		r+=T;
		int ret = max(t[l], t[r]);
		while(l/2!=r/2) {
			if(l%2==0) ret = max(ret, t[l+1]);
			if(r%2==1) ret = max(ret, t[r-1]);
			l/=2;
			r/=2;
		}
		return ret;
	}
};
SegTree seg;
vector<pii> v[1000009];
int tab[1000009]; 
int ans[1000009];
vector<tuple<int, int, int, int>> Q;
int32_t main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n, q;
	cin >> n >> q;
	for(int i=0;i<n;i++) {
		cin >> tab[i];
	}
	vector<pii> s;
	for(int i=0;i<n;i++) {
		while(sz(s)&&s.back().nd<=tab[i]) {
			s.pop_back();
		}
		if(sz(s)) {
			v[s.back().st].pb({i, tab[i]+tab[s.back().st]});
		}
		s.pb({i, tab[i]});
	}
	for(int i=0;i<q;i++) {
		int l, r, k;
		cin >> l >> r >> k;
		l--;
		r--;
		Q.pb({-l, r, k, i});
	}
	sort(all(Q));
	int cnt = n-1;
	for(auto [l, r, k, id]:Q) {
		l = -l;
		while(cnt>=0&&cnt>=l) {
			for(pii x:v[cnt]) {
				seg.update(x.st, x.nd);
			}
			cnt--;
		}
		ans[id] = (k>=seg.query(0, r));
	}
	for(int i=0;i<q;i++) {
		cout << ans[i] << "\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...