Pagini recente » Cod sursa (job #39205) | Cod sursa (job #208496) | Cod sursa (job #708266) | Cod sursa (job #2508537) | Cod sursa (job #2737168)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
int arb[400005];
void update(int poz,int x)
{
int y;
arb[poz]=x;
while(poz>1)
{
y=max(arb[(poz/2)*2],arb[2*(poz/2)+1]);
if(y<arb[poz/2])
arb[poz/2]=y;
else
return ;
poz/=2;
}
}
int querry(int nod, int x,int y,int st,int dr)
{
if(x==st&&y==dr)
return arb[nod];
int mid=(st+dr)/2;
if(y<=mid)
return querry(nod*2,x,y,st,mid);
else
if(x>mid)
return querry(nod*2+1,x,y,mid+1,dr);
else
return max(querry(nod*2,x,mid,st,mid), querry(nod*2+1,mid+1,y,mid+1,dr));
}
int main()
{
int tip,x,y,m,n;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>>n>>m;
int put=1;
while(put<n)
{
put=put*2;
}
for(int i=put;i<put+n;i++)
cin>>arb[i];
for(int i=put-1;i>0;i--)
arb[i]=max(arb[i*2],arb[i*2+1]);
while(m--)
{
cin>>tip>>x>>y;
if(tip==0)
cout<<querry(1,x,y,1,put)<<"\n";
else
update(put+x-1,y);
}
return 0;
}