Pagini recente » Cod sursa (job #820698) | Cod sursa (job #2735461) | Cod sursa (job #54060) | Cod sursa (job #1683327) | Cod sursa (job #1852490)
#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];
if(a==b-1)return max(v[0][a],v[0][b]);
int i,p;
for(i=1,p=2;p<b-a+1;p*=2,i++);
i--;p/=2;
int c=a/p*p;
if(c<a)c+=p;
return max(ret(a,c-1),max(v[i][c/p],ret(c+p,b)));
}
int main()
{
f>>n>>m;
for(i=0;i<n;i++)
{
f>>v[0][i];
for(j=1,p=2;p<=n-i;j++,p*=2)
v[j][i/p]=max(v[j-1][i/(p/2)],v[j-1][i/(p/2)+(i/(p/2)%2==0)-i/(p/2)%2]);
}
for(i=0;i<m;i++)
{
f>>q>>a>>b;
if(q==1)
{
v[0][a-1]=b;
for(j=1,p=2;p<=n-a-1;j++,p*=2)
v[j][(a-1)/p]=max(v[j-1][(a-1)/(p/2)],v[j-1][(a-1)/(p/2)+((a-1)/(p/2)%2==0)-(a-1)/(p/2)%2]);
}
if(q==0)
{
g<<ret(a-1,b-1)<<'\n';
}
}
}