Pagini recente » Cod sursa (job #1910992) | Cod sursa (job #42312) | Cod sursa (job #363261) | Cod sursa (job #683680) | Cod sursa (job #2119675)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 100002;
int maxArb[4*N], Max, st, dr, val, poz;
void update(int nod, int l, int r){
int mid = (l + r) / 2;
if(l == r){
maxArb[nod] = val;
return ;
}
if(poz <= mid)
update(2*nod,l,mid);
else
update(2*nod+1,mid+1,r);
maxArb[nod] = max(maxArb[2*nod], maxArb[2*nod+1]);
}
void query(int nod, int l, int r){
int mid = (l + r) / 2;
if(st <= l && r <= dr){
Max = max(Max, maxArb[nod]);
return ;
}
if(l > dr || r < st)
return ;
if(st <= mid)
query(2*nod,l,mid);
if(mid<dr)
query(2*nod+1,mid+1,r);
}
int main()
{
int n,m,C,x,y;
in>>n>>m;
for(int i=1;i<=n;i++){
in>>x;
poz = i;
val = x;
update(1,1,n);
}
for(int i=1;i<=m;i++){
in>>C>>x>>y;
if(C == 0){
Max = -1;
st = x;
dr = y;
query(1,1,n);
out<<Max<<"\n";
}
else{
poz = x;
val = y;
update(1,1,n);
}
}
in.close();
out.close();
return 0;
}