Pagini recente » Cod sursa (job #2762058) | Cod sursa (job #2219115) | Cod sursa (job #1122857) | Cod sursa (job #2123680) | Cod sursa (job #2122472)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,v[100009],aint[200009],i,p,x,y;
void build()
{
int i;
for(i=1;i<=n;i++)
aint[n+i-1]=v[i];
for(i=n-1;i>0;i--)
aint[i]=max(aint[i*2],aint[i*2+1]);
}
void update(int p,int x)
{
aint[p+n-1]=x;
int i;
for(i=(p+n-1)/2;i>0;i>>=1)
aint[i]=max(aint[i<<1],aint[i<<1|1]);
}
int query(int a,int b)
{
int answer=0;
a+=n-1;
b+=n;
for(;a<b;a>>=1,b>>=1)
{
if(a&1)
answer=max(answer,aint[a++]);
if(b&1)
answer=max(answer,aint[--b]);
}
return answer;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>v[i];
build();
for(i=1;i<=m;i++)
{
fin>>p;
if(p==1)
{
fin>>x>>y;
update(x,y);
}
else
{
fin>>x>>y;
int ans=query(x,y);
fout<<ans<<endl;
}
}
return 0;
}