Submission #973404

#TimeUsernameProblemLanguageResultExecution timeMemory
973404colossal_pepeHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
923 ms98416 KiB
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;

struct SGT {
	int n;
	vector<int> tree;
	SGT(int _n) {
		n = _n;
		tree.resize(4 * n, 0);
	}
	void update(int idx, int x) {
		for (tree[idx += n] = x; idx > 1; idx /= 2) {
			tree[idx / 2] = max(tree[idx], tree[idx^1]);
		}
	}
	int query(int l, int r) {
		int ret = 0;
		for (l += n, r += n; l <= r; l /= 2, r /= 2) {
			if (l % 2) ret = max(ret, tree[l++]);
			if (not (r % 2)) ret = max(ret, tree[r--]);
		}
		return ret;
	}
};

int n, m;
vector<int> a, ans;
vector<pair<int, int>> q;
vector<vector<int>> r2q;

void solve() {
	ans.resize(m);
	SGT sgt = SGT(n);
	stack<int> st;
	for (int r = 0; r < n; r++) {
		while (not st.empty() and a[st.top()] <= a[r]) st.pop();
		if (not st.empty()) sgt.update(st.top(), a[st.top()] + a[r]);
		st.push(r);
		for (int qi : r2q[r]) {
			auto [l, k] = q[qi];
			ans[qi] = (k >= sgt.query(l, r));
		}
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n >> m;
	a.resize(n);
	for (int &x : a) {
		cin >> x;
	}
	q.resize(m), r2q.resize(n);
	for (int i = 0; i < m; i++) {
		int l, r, k;
		cin >> l >> r >> k;
		l--, r--;
		q[i] = make_pair(l, k);
		r2q[r].push_back(i);
	}
	solve();
	for (int i = 0; i < m; i++) {
		cout << ans[i] << '\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...