Pagini recente » Cod sursa (job #126667) | Cod sursa (job #146431) | Cod sursa (job #2173257) | Cod sursa (job #2875760) | Cod sursa (job #3274747)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NMax=1000;
int v[100005];
int ar[400005];
int n;
int m;
int sol;
int a,b,op;
void num(int st,int dr,int i)
{
if(st==dr)
ar[i]=v[st];
else
{
num(st,(st+dr)/2,2*i);
num((st+dr)/2+1,dr,2*i+1);
ar[i]=max(ar[2*i],ar[2*i+1]);
}
}
void update(int st,int dr,int i)
{
if(st==dr)
ar[i]=b;
else
{
int mid=(st+dr)/2;
if(a<=mid)
{
update(st,mid,2*i);
}
else
update(mid+1,dr,2*i+1);
ar[i]=max(ar[2*i],ar[2*i+1]);
}
}
void maxim(int st,int dr,int i)
{
if(a<=st && dr<=b)
{sol=max(sol,ar[i]);return;}
if(dr<a || st>b)
return;
maxim(st,(st+dr)/2,2*i);
maxim((st+dr)/2+1,dr,2*i+1);
}
void solve()
{
while(m--)
{
fin>>op>>a>>b;
sol=0;
if(op==0)
{
maxim(1,n,1);
fout<<sol<<endl;
}
if(op==1)
{
v[a]=b;
update(1,n,1);
}
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>v[i];
num(1,n,1);
solve();
return 0;
}