Pagini recente » Cod sursa (job #1337857) | Cod sursa (job #2123042) | Cod sursa (job #1283439) | Cod sursa (job #2180687) | Cod sursa (job #1047336)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 1<<18, CEVA = 100001;
int poz, val, a, b, t[N], queried;
int maxim(int x, int y){
if(x >= y){
return x;
}
return y;
}
void query(int p, int st, int dr){
if(a<=st && dr<=b){
queried = t[p];
}
int m = (st+dr)/2, m1 = -N, m2 = -N;
if(a <= m){
m1 = query(2*p, st, m);
}
if(m+1 <= b){
m2 = query(2*p+1, m+1, dr);
}
queried maxim(m1, m2);
}
void update(int p, int st, int dr){
if(st == dr){
t[p] = val;
return;
}
int m = (st+dr)/2;
if(poz <= m){
update(2*p, st, m);
} else {
update(2*p+1, m+1, dr);
}
t[p] = maxim(t[2*p], t[2*p+1]);
}
int main(){
int n, m, type, i;
in >> n >> m;
for(i = 1; i <= n; i++){
in >> val;
poz = i;
update(1, 1, n);
}
for(i = 1; i <= m; i++){
in >> type;
if(type == 0){
in >> a >> b;
queried = query(1, 1, n);
out << queried << "\n";
} else {
in >> poz >> val;
update(1, 1, n);
}
}
}