제출 #1143614

#제출 시각아이디문제언어결과실행 시간메모리
1143614crispxxHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
17 / 100
3095 ms67744 KiB
/**
 *    author: a.k
 *    created: idk
**/
#include <bits/stdc++.h>
using namespace std;
 
#define all(x) x.begin(), x.end()
#define int long long
#define nl '\n'

const int INF = 1e9 + 1;

struct segtree {
	int n;
	vector<int> t;
	
	segtree(int n) : n(n), t(n << 2) {}
	
	void upd(int v, int tl, int tr, int i, int x) {
		if(tl == tr) {
			t[v] = x;
			return;
		}
		int tm = (tl + tr) >> 1;
		if(i <= tm) upd(v << 1, tl, tm, i, x);
		else upd(v << 1 | 1, tm + 1, tr, i, x);
		t[v] = max(t[v << 1], t[v << 1 | 1]);
	}
	void upd(int i, int x) {
		upd(1, 1, n, i, x);
	}
	int get(int v, int tl, int tr, int l, int r) {
		if(r < tl || tr < l) return -INF;
		if(l <= tl && tr <= r) return t[v];
		int tm = (tl + tr) >> 1;
		int L = get(v << 1, tl, tm, l, r);
		int R = get(v << 1 | 1, tm + 1, tr, l, r);
		return max(L, R);
	}
	int get(int l, int r) {
		if(l > r) return -INF;
		return get(1, 1, n, l, r);
	}
};

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int n, m; cin >> n >> m;
	
	vector<int> a(n);
	
	for(auto &u : a) cin >> u;
	
	segtree t(n);
	
	while(m--) {
		int l, r, k; cin >> l >> r >> k;
		
		vector<pair<int, int>> v;
		
		for(int i = l; i <= r; i++) {
			v.emplace_back(a[i - 1], i);
			t.upd(i, a[i - 1]);
		}
		
		sort(all(v));
		
		bool flag = true;
		
		for(int i = (int)v.size() - 1; i >= 0; i--) {
			auto [u, idx] = v[i];
			if(u + t.get(idx + 1, r) > k) {
				flag = false;
				break;
			}
			t.upd(idx, -INF);
		}
		
		cout << flag << nl;
	}
}
#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...