Pagini recente » Cod sursa (job #2798213) | Cod sursa (job #2652990) | Cod sursa (job #1612778) | Cod sursa (job #2700826) | Cod sursa (job #2592307)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 1 << 18, INF = 1;
int n, q, t[N], a, b, poz, val;
void actualizare(int p, int st, int dr)
{
//out << "d" << " ";
if(st == dr){
t[p] = val;
return;
}
int m = (st + dr) / 2;
if(poz <= m){
actualizare(2 * p, st, m);
}
else{
actualizare(2 * p + 1, m + 1, dr);
}
t[p] = max(t[2 * p], t[2 * p + 1]);
}
int interogare(int p, int st, int dr)
{
//out << "a";
if(a <= st && dr <= b){
return t[p];
}
int m = (st + dr) / 2, mst = -INF, mdr = -INF;
if(a <= m){
mst = interogare(2 * p, st, m);
}
if(b > m){
mdr = interogare(2 * p + 1, m + 1, dr);
}
return max(mst,mdr);
}
int main()
{
in >> n >> q;
for(int i = 1; i <= n; i++){
in >> val;
poz = i;
actualizare(1, 1, n);
//out << i << " ";
}
//out << "trecut";
while(q--){
int code;
in >> code;
//out << code << "\n";
if(code == 0){
in >> a >> b;
int m = interogare(1, 1, n);
out << m << "\n";
}
else{
in >> poz >> val;
actualizare(1, 1, n);
}
}
return 0;
}