Pagini recente » Cod sursa (job #3153800) | Utilizatori inregistrati la Junior Challenge 2016 Runda 1 | Cod sursa (job #2696066) | Cod sursa (job #2983261) | Cod sursa (job #1299431)
#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[2*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;
}