| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1285205 | LIA | Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) | C++17 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vll vector<ll>
#define loop(i, s, e) for (ll i = s; i < e; ++i)
#define pll pair<ll, ll>
struct Seg {
vll seg;
ll sz = 1;
Seg(ll n) {
for (; sz < n; sz <<= 1)
;
seg.resize(2 * sz);
}
void update(ll i, ll v) {
i += sz;
seg[i] = v;
for (i /= 2; i > 0; i /= 2)
seg[i] = max(seg[i * 2], seg[i * 2 + 1]);
}
ll query(ll l, ll r) {
ll ans = 0;
l += sz, r += sz;
while (l <= r) {
if (l & 1)
ans = max(ans, seg[l++]);
if (!(r & 1))
ans = max(ans, seg[r--]);
l /= 2;
r /= 2;
}
return ans;
}
};
int main() {
ll n, m;
cin >> n >> m;
vll w(n);
loop(i, 0, n) cin >> w[i];
Seg seg(1e6 + 1);
set<pll, greater<pll>> match;
loop(i, 0, n) {
match.insert({w[i], i});
auto it = match.lower_bound({w[i], i});
ll idx = it->second;
if (it == match.begin()) {
seg.update(i, -1);
continue;
}
--it;
ll idx = it->second;
seg.update(i, idx);
}
while (m--) {
ll l, r, k;
cin >> l >> r >> k;
bool ans = 1;
l--, r--;
ll maxi = seg.query(l, r);
if (maxi >= l) {
ans = 0;
}
cout << ans << "\n";
}
return 0;
}
