Pagini recente » Cod sursa (job #488409) | Cod sursa (job #2265596) | Cod sursa (job #40488) | Cod sursa (job #1554881) | Cod sursa (job #1675881)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int NMAX=270005;
int a[NMAX];
int n,m;
inline int Query(int nod,int x,int y,int st,int dr)
{
if(st==x && dr==y)
return a[nod];
int m=(st+dr)/2;
if(y<=m)
return Query(2*nod,x,y,st,m);
if(m+1<=x)
return Query(2*nod+1,x,y,m+1,dr);
return max(Query(2*nod,x,m,st,m),Query(2*nod+1,m+1,y,m+1,dr));
}
inline void Update(int p,int x)
{
p=p+n-1;
a[p]=x;
while(p>0)
{
int t=p/2;
int mx=max(a[2*t],a[2*t+1]);
a[t]=mx;
p=t;
}
}
int main()
{
int x,y,op;
f>>n>>m;
int N=1;
while(N<n)
N*=2;
int j=N,val;
for(int i=1;i<=n;i++)
{
f>>val;
a[j++]=val;
}
n=N;
for(int i=n-1;i>=1;i--)
a[i]=max(a[2*i],a[2*i+1]);
for(int i=1;i<=m;i++)
{
f>>op>>x>>y;
if(op==1)
Update(x,y);
else
g<<Query(1,x,y,1,n)<<"\n";
}
return 0;
}