#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 5;
const int BLOCK = 1000;
int n, m, a[N], b[N];
int block_max[N / BLOCK + 5];
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i < n; i++)
b[i] = (a[i] > a[i + 1]) ? a[i] + a[i + 1] : 0;
int blocks = (n + BLOCK - 1) / BLOCK;
for (int i = 0; i < blocks; i++) {
int l = i * BLOCK + 1;
int r = min(n - 1, (i + 1) * BLOCK);
int mx = 0;
for (int j = l; j <= r; j++) mx = max(mx, b[j]);
block_max[i] = mx;
}
while (m--) {
int l, r, k;
cin >> l >> r >> k;
r--; // because we query b[l..r-1]
int bl = (l - 1) / BLOCK;
int br = (r - 1) / BLOCK;
int mx = 0;
if (bl == br) {
for (int i = l; i <= r; i++) mx = max(mx, b[i]);
} else {
for (int i = l; i <= (bl + 1) * BLOCK; i++) mx = max(mx, b[i]);
for (int i = bl + 1; i <= br - 1; i++) mx = max(mx, block_max[i]);
for (int i = br * BLOCK + 1; i <= r; i++) mx = max(mx, b[i]);
}
cout << (mx <= k ? 1 : 0) << '\n';
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |