Pagini recente » Cod sursa (job #807632) | Cod sursa (job #2489264) | Cod sursa (job #1337107) | Cod sursa (job #2752540) | Cod sursa (job #1812235)
#include <bits/stdc++.h>
using namespace std;
int N,n,m;
int a[400003];
int Query(int p,int x,int y,int st,int dr)
{
int mijl;
if(x==st && y==dr)
return a[p];
mijl=(st+dr)/2;
if(y<=mijl)
return Query(2*p,x,y,st,mijl);
if(x>=mijl+1)
return Query(2*p+1,x,y,mijl+1,dr);
return max(Query(2*p,x,mijl,st,mijl),Query(2*p+1,mijl+1,y,mijl+1,dr));
}
void Update(int p,int x)
{
p=p+N-1;
a[p]=x;
while(p>=1)
{
p=p/2;
a[p]=max(a[2*p],a[2*p+1]);
}
}
void Citire()
{
int i,op,x,y;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin>>n>>m;
N=1;
while(N<n)
N*=2;
for(i=N;i<N+n;++i)
fin>>a[i];
for(i=N-1;i>=1;--i)
a[i]=max(a[2*i],a[2*i+1]);
//operatii
for(i=1;i<=m;++i)
{
fin>>op>>x>>y;
if(op==0)
fout<<Query(1,x,y,1,N)<<"\n";
else
Update(x,y);
}
fin.close();
fout.close();
}
int main()
{
Citire();
return 0;
}