Pagini recente » Borderou de evaluare (job #1639574) | Borderou de evaluare (job #2055817) | Borderou de evaluare (job #702966) | Borderou de evaluare (job #2953546) | Cod sursa (job #798326)
Cod sursa(job #798326)
#include <fstream>
#include <iostream>
using namespace std;
int arbint[4000000];
int u_pos, u_val;
int q_st, q_dr, maxim;
void query(int nod, int st, int dr) {
if(q_st <= st && dr <= q_dr) {
maxim = max(maxim, arbint[nod]);
return;
}
int mij = (st + dr) / 2;
if(q_st <= mij) query(2*nod, st, mij);
if(mij < q_dr) query(2*nod + 1, mij+1, dr);
}
void update(int nod, int st, int dr) {
if(st == dr) {
arbint[nod] = u_val;
return;
}
int mij = (st + dr) / 2;
if(u_pos <= mij) update(2*nod, st, mij);
else update(2*nod + 1, mij+1, dr);
arbint[nod] = max(arbint[nod*2], arbint[nod*2 + 1]);
}
int main(void) {
int n, m;
ifstream fin("arbint.in");
fin >> n >> m;
for(int i = 1; i <= n; ++i) {
int nr;
fin >> nr; u_pos = i; u_val = nr;
update(1, 1, n);
}
ofstream fout("arbint.out");
for(int i = 0; i < m; ++i) {
int op, arg1, arg2;
fin >> op >> arg1 >> arg2;
if(op == 0) {
maxim = 0; q_st = arg1; q_dr = arg2;
// cout << q_st << ' ' << q_dr << '\n';
query(1, 1, n);
fout << maxim << '\n';
}
else {
u_pos = arg1; u_val = arg2;
update(1, 1, n);
}
}
fin.close();
fout.close();
}