Submission #891247

#TimeUsernameProblemLanguageResultExecution timeMemory
891247serifefedartarHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
730 ms95232 KiB
#include <bits/stdc++.h>
using namespace std;

#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9 + 9;
const ll LOGN = 21;
const ll MAXN = 1e6 +  100;

struct Query {
	int l, r, k, id;
	Query(int _l, int _r, int _k, int _id) : l(_l), r(_r), k(_k), id(_id) { }
};

vector<Query> Q[MAXN];
int ans[MAXN], w[MAXN], fen[MAXN];
void update(int k, int val) {
	while (k) {
		fen[k] = max(fen[k], val);
		k -= k & -k;
	}
}

int get(int k) {
	int mx = 0;
	while (k < MAXN) {
		mx = max(mx, fen[k]);
		k += k & -k;
	}
	return mx;
}

int main() {
	fast
	int N, M, l, r, k;
	cin >> N >> M;

	w[0] = 1e9 + 100;
	for (int i = 1; i <= N; i++)
		cin >> w[i];
	for (int i = 0; i < M; i++) {
		cin >> l >> r >> k;
		Q[r].push_back(Query(l, r, k, i));
	}

	stack<int> st;
	st.push(0);
	for (int i = 1; i <= N; i++) {
		while (w[st.top()] <= w[i])
			st.pop();
		update(st.top(), w[st.top()] + w[i]);
		st.push(i);
		for (auto u : Q[i])
			ans[u.id] = get(u.l) <= u.k;
	}

	for (int i = 0; i < M; 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...