#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define f first
#define s second
struct SegTree {
vector<int> tree;
SegTree(int n) {
tree.assign(4*n, 0);
}
void query(int p, int l, int r,int i, int x) {
if (l>i || r<i) return;
if (l==r) {
tree[p] = x;
return;;
}
else {
int m = (l+r)/2;
query(2*p, l, m, i, x);
query(2*p+1, m+1, r, i, x);
int i1 = tree[2*p];
int i2 = tree[2*p+1];
tree[p] = max(i1, i2);
}
}
int rmq(int p, int l, int r, int i, int j) {
if (l> j || r < i) return 0;
if (i <= l && r <= j) return tree[p];
int m = (l+r)/2;
int i1 = rmq(2*p, l, m, i, j);
int i2 = rmq(2*p+1, m+1, r, i, j);
return max(i1, i2);
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, q; cin >> n >> q;
vector<int> a(n);
SegTree st(n);
for (int i=0; i<n; i++) {
cin >> a[i];
st.query(1, 0, n-1, i, a[i]);
}
while (q--) {
int t, l, r; cin >> t >> l >> r;
l--; r--;
cout << st.rmq(1, 0, n-1, max(0, l-t), l) << '\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... |