Submission #1335931

#TimeUsernameProblemLanguageResultExecution timeMemory
1335931gelastropodHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
13 / 100
2214 ms102252 KiB
#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;

vector<int> W, die;

struct node {
	int s, e, m, v1, v2;
	node* l, * r;

	node(int _s, int _e) : s(_s), e(_e), m((_s + _e) / 2) {
		if (s == e) v1 = v2 = W[s];
		else {
			l = new node(s, m), r = new node(m + 1, e);
			v1 = min(l->v1, r->v1);
			v2 = max(l->v2, r->v2);
		}
	}

	int qry1(int a, int b) {
		if (b < s || a > e) return INT_MAX;
		if (a <= s && b >= e) return v1;
		return min(l->qry1(a, b), r->qry1(a, b));
	}

	int qry2(int a, int b) {
		if (b < s || a > e) return 0;
		if (a <= s && b >= e) return v2;
		return max(l->qry2(a, b), r->qry2(a, b));
	}
} *root;

signed main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int N, M, a, b, c; cin >> N >> M;
	for (int i = 0; i < N; i++) {
		cin >> a;
		W.push_back(a);
		if (i > 0 && W[i] < W[i - 1]) die.push_back(i - 1);
	}
	root = new node(0, N - 1);
	for (int i = 0; i < M; i++) {
		cin >> a >> b >> c; a--, b--;
		int d = c - root->qry1(a, b);
		auto iter = lower_bound(die.begin(), die.end(), b);
		if (iter == die.begin()) {
			cout << "1\n";
			continue;
		}
		iter--;
		if (a > *iter || root->qry2(a, *iter) <= d) cout << "1\n";
		else cout << "0\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...