Pagini recente » Cod sursa (job #2055411) | Cod sursa (job #2460139) | Cod sursa (job #2677744) | Cod sursa (job #722915) | Cod sursa (job #1957210)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,Pos,Val,start,finish,maxim;
int MaxArb[5000000];
void Update(int nod, int left, int right)
{
if(left==right)
{
MaxArb[nod]=Val;
return;
}
int div=(left+right)/2;
if(Pos<=div) Update(2*nod,left,div);
else Update(2*nod+1,div+1,right);
MaxArb[nod]=max(MaxArb[2*nod],MaxArb[2*nod+1]);
}
void Query(int nod, int left, int right)
{
if(start<=left && right<=finish)
{
if(maxim<MaxArb[nod])
maxim=MaxArb[nod];
return;
}
int div=(left+right)/2;
if(start <= div) Query(2*nod,left,div);
if(div<finish) Query(2*nod+1,div+1,right);
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
for(int i=1;i<=n;++i)
{
f>>Val;
Pos=i;
Update(1,1,n);
}
int x,y,z;
for(int i=1;i<=m;i++)
{
f>>x>>y>>z;
if(x==1)
{
Pos=y;
Val=z;
Update(1,1,n);
}
else
{
maxim=-1;
start=y;
finish=z;
Query(1,1,n);
g<<maxim<<'\n';
}
}
return 0;
}