Submission #1304839

#TimeUsernameProblemLanguageResultExecution timeMemory
1304839g4yuhgHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
77 ms6636 KiB
#include<bits/stdc++.h>
typedef int ll;
#define fi first
#define se second
#define pii pair<ll,ll>
#define N 100005
#define LOG 18
#define endl '\n'
using namespace std;

bool ghuy4g;

ll n, q;
ll a[N], kq[N];

struct Qr {
	ll l, r, k, id;
} qr[N];

struct Seg {
	ll l, r, val;
} seg[N];

ll m = 0;

ll st[4 * N], gh[N];

void update(ll id, ll l, ll r, ll i, ll v) {
	if (i > r || i < l) return;
	if (l == r) {
		st[id] = max(st[id], v);
		return;
	}
	ll mid = (l + r) / 2;
	update(id * 2, l, mid, i, v);
	update(id * 2 + 1, mid + 1, r, i, v);
	st[id] = max(st[id * 2], st[id * 2 + 1]);
}

ll get(ll id, ll l, ll r, ll L, ll R) {
	if (l > R || r < L) return 0;
	if (L <= l && r <= R) return st[id];
	ll mid = (l + r) / 2;
	return max(get(id * 2, l, mid, L, R), get(id * 2 + 1, mid + 1, r, L, R));
}

void pre() {
	vector<ll> st;
	for (int i = 1; i <= n; i ++) {
		while (st.size() && a[i] < a[st.back()]) {
			ll id = st.back();
			st.pop_back();
			seg[++ m] = {id, i, a[i] + a[id]};
		}
		st.push_back(i);
	}
	sort(qr + 1, qr + 1 + q, [&](Qr A, Qr B) {
		return A.r < B.r;
	});
	sort(seg + 1, seg + 1 + m, [&](Seg A, Seg B) {
		return A.r < B.r;
	});
	for (int i = 1; i <= m; i ++) {
		cout << seg[i].l << " " << seg[i].r << " " << seg[i].val << endl;
	}
	ll cur = 1;
	for (int i = 1; i <= q; i ++) {
		while (cur <= m && seg[cur].r <= qr[i].r) {
			update(1, 1, n, seg[cur].l, seg[cur].val);
			cur ++ ;
		}
		kq[qr[i].id] = get(1, 1, n, qr[i].l, qr[i].r);
	}
	for (int i = 1; i <= q; i ++) {
		cout << (kq[i] <= gh[i]) << endl;
	}
}

bool klinh;

signed main() {
	//freopen("qcsys.inp", "r", stdin);
	//freopen("qcsys.out", "w", stdout);
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	cin >> n >> q;
	for (int i = 1; i <= n; i ++) {
		cin >> a[i];
	}
	for (int i = 1; i <= q; i ++) {
		cin >> qr[i].l >> qr[i].r >> qr[i].k;
		gh[i] = qr[i].k;
	}
	pre();
		
	cerr << fabs(&klinh - &ghuy4g) / double(1024 * 1024);
}
#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...