Pagini recente » Cod sursa (job #3160153) | Cod sursa (job #1247364) | Cod sursa (job #1206487) | Cod sursa (job #1206379) | Cod sursa (job #2384480)
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, m, start;
int a[400005];
int idk(int y) {
int x = 1;
while (x < y)
x <<= 1;
return x;
}
void Update(int nod) {
a[nod] = max(a[nod * 2], a[nod * 2 + 1]);
if (nod == 1)
return;
Update(nod / 2);
}
int Query(int nod, int st, int dr, int x, int y) {
int ans = 0, k = 0;
if (x <= st && y >= dr)
return a[nod];
int mij = (st + dr) / 2;
if (x <= mij) {
k = Query(2 * nod, st, mij, x, y);
ans = max(k, ans);
}
if (y > mij) {
k = Query(2 * nod + 1, mij + 1, dr, x, y);
ans = max(k, ans);
}
return ans;
}
int main() {
fin >> n >> m;
start = idk(n);
int x, y, c = 0;
for (int i = 0; i < n; ++i) {
fin >> a[start + i];
Update((start + i) / 2);
}
for (int i = 1; i <= m; ++i) {
fin >> c >> x >> y;
if (c == 0)
fout << Query(1, 1, start, x, y) << '\n';
else {
a[start + x - 1] = y;
Update((start + x - 1) / 2);
}
}
}