Pagini recente » Cod sursa (job #1801117) | Cod sursa (job #2321645) | Cod sursa (job #2120735) | Cod sursa (job #3000069) | Cod sursa (job #1299432)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m;
int val, poz, start, finish, op, maxim;
int ARB[4*nmax+2];
void update(int nod, int st, int dr) {
if (st == dr) {
ARB[nod] = val;
return;
}
int mid = (st + dr) / 2;
if (poz <= mid) update(2*nod, st, mid);
else update(2*nod+1, mid+1, dr);
ARB[nod] = max(ARB[2*nod], ARB[2*nod+1]);
}
void query(int nod, int st, int dr) {
if (start <= st && dr <= finish) {
maxim = max(maxim, ARB[nod]);
return;
}
int mid = (st + dr) / 2;
if (start <= mid) query(2*nod, st, mid);
if (mid < finish) query(2*nod+1, mid+1, dr);
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> val;
poz = i;
update(1, 1, n);
}
for (int i = 1; i <= m; i++) {
fin >> op;
if (!op) {
fin >> start >> finish;
maxim = -1;
query(1, 1, n);
fout << maxim << "\n";
} else {
fin >> poz >> val;
update(1, 1, n);
}
}
fin.close();
fout.close();
return 0;
}