Pagini recente » Cod sursa (job #910744) | Cod sursa (job #851657) | Cod sursa (job #1774009) | Cod sursa (job #2051890) | Cod sursa (job #962335)
Cod sursa(job #962335)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int INF = 99999999;
int n,m,val,p,st,dr,poz;
int t[300009];
int maxim(int a, int b)
{
if(a>b)
return a;
return b;
}
void update(int p, int a, int b)
{
int m;
if(a == poz && b == poz){
t[p] = val;
return;
}
m = (a+b)/2;
if(poz<=m)
update(p*2,a,m);
if(poz>m)
update(p*2+1,m+1,b);
if(t[2*p]> t[2*p+1])
t[p] = t[2*p];
else
t[p] = t[2*p+1];
}
int query(int p,int a,int b)
{
if(st <= a && b<= dr)
return t[p];
int m = (a+b)/2;
int r1,r2;
if(st <= m)
r1=query(2*p,a,m);
else
r1= -INF;
if(dr>m)
r2 = query(2*p+1,m+1,b);
else
r2 = -INF;
return maxim(r1,r2);
}
void proces()
{
int x,y,oper;
f>>n>>m;
for( poz=1;poz<=n;poz++)
{
f>>val;
update(1,1,n);
}
for(int i=1;i<=m;i++)
{
f>>oper>>st>>dr;
poz = st;
val = dr;
if( oper == 1)
{
update(1,1,n);
}
else{
g<<query(1,1,n)<<'\n';
}
}
}
int main()
{
proces();
return 0;
}