Pagini recente » Autentificare | Arhiva de probleme | Cod sursa (job #606498) | Cod sursa (job #2015939) | Cod sursa (job #1200514)
#include<fstream>
using namespace std;
int max(int x, int y)
{
if (x>y) return x;
else return y;
}
int mijl,n,m,i,x,y,sol,a[400009],k;
void update(int st, int dr , int nod)
{
if (st==dr) a[nod]=y;
else
{
mijl = (st+dr) / 2;
if (x<=mijl) update(st , mijl , nod*2);
else
update(mijl+1,dr,nod*2+1);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
}
void query (int st , int dr , int nod)
{
if ((x<=dr)&&(y>=st )) sol=max(sol,a[nod]);
else
{
mijl=(st+dr) /2;
if (x<=mijl) query (st,mijl,2*nod);
if (y>mijl) query (mijl+1, dr , nod *2+1);
}
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>>n>>m;
for (i=1 ; i<=n ; i=i+1) {
cin>>y;
x=i;
update(1,n,1);
}
while (m--) {
cin>> k>>x>>y;
if (k==0) {
sol=0;
query(1,n,1);
cout<<sol<<"\n";
}
else
update(1,n,1);
}
return 0 ;
cin.close();
cout.close();
}