Pagini recente » Cod sursa (job #720999) | Cod sursa (job #2580550) | Cod sursa (job #2167216) | Cod sursa (job #1911252) | Cod sursa (job #974971)
Cod sursa(job #974971)
#include <iostream>
#include <fstream>
using namespace std;
int i,v[250000],n1,n2,m,t,a,b,poz,ax;
int f1(int n)
{
int k=0;
int b=0;
while (n!=1)
{
if (n%2!=0)
b=1;
k++;
n=n/2;
}
if (b==1)
k++;
n=1;
for (i=1;i<=k;i++)
n=n*2;
return n;
}
int cmx(int ind)
{
if (v[ind*2]==0)
v[ind*2]=cmx(ind*2);
if (v[ind*2+1]==0)
v[ind*2+1]=cmx(ind*2+1);
return max(v[ind*2],v[ind*2+1]);
}
int imx(int l,int r)
{
if (l==r)
return v[l];
if (l%2==1)
return max(v[l],imx(l+1,r));
if (r%2==1)
return max(v[r],imx(l,r-1));
return imx(l/2,r/2);
}
int main()
{
FILE * f;
f=fopen("arbint.in","r");
ofstream g("arbint.out");
fscanf(f,"%d%d",&n2,&m);
n1=f1(n2);
for (i=n1+1;i<=n1+n2;i++)
fscanf(f,"%d",&v[i]);
for (i=n1+n2+1;i<=n1*2+2;i++)
v[i]=-1;
v[1]=cmx(1);
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&t,&a,&b);
if (t==1)
{
v[n1+a]=b;
poz=n1+a;
while ((ax!=v[poz])&&(poz!=1))
{
poz=poz/2;
ax=v[poz];
v[poz]=max(v[poz*2],v[poz*2+1]);
}
}
if (t==0)
{
g<<imx(n1+a,n1+b)<<'\n';
}
}
return 0;
}