Pagini recente » Cod sursa (job #1879808) | Cod sursa (job #1861390) | Cod sursa (job #1355434) | Arhiva de probleme | Cod sursa (job #1852525)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
fstream f("arbint.in",ios::in),g("arbint.out",ios::out);
int n,m,v[18][100000],i,j,p,q,a,b;
int ret(int a, int b)
{
if(b<a)return 0;
if(a==b)return v[0][a];
int i,p,c;
for(i=0,p=1;p*2<b-a+1;p*=2,i++);
c=a/p*p;
if(c<a)c+=p;
return max(ret(a,c-1),max(v[i][c/p],ret(c+p,b)));
}
void up(int l,int i)
{
if(i%2==0)v[l][i/2]=max(v[l-1][i],v[l-1][i+1]);
else v[l][i/2]=max(v[l-1][i],v[l-1][i-1]);
if(l<17) up(l+1,i/2);
}
int main()
{
f>>n>>m;
for(i=0;i<n;i++)
{
f>>v[0][i];
up(1,i);
}
for(i=0;i<m;i++)
{
f>>q>>a>>b;
if(q==1)
{
a--;
v[0][a]=b;
up(1,a);
}
if(q==0)
{
g<<ret(a-1,b-1)<<'\n';
}
}
}