Pagini recente » Cod sursa (job #397384) | Cod sursa (job #754162) | Cod sursa (job #2141871) | Cod sursa (job #1738924) | Cod sursa (job #280851)
Cod sursa(job #280851)
#include<fstream.h>
#define xx 100001
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,poz,val,max,h[5*xx],a,b;
void creare_arb(int,int,int);
void interogare(int,int,int);
int main()
{
int i,t,op;
fin>>n>>t;
for(i=1;i<=n;i++)
{
fin>>val;
poz=i;
creare_arb(1,1,n);
}
for(i=1;i<=t;i++)
{
fin>>op>>a>>b;
if(op)
{
poz=a;
val=b;
creare_arb(1,1,n);
}
else
{
max=0;
interogare(1,1,n);
fout<<max<<'\n';
}
}
fout.close();
return 0;
}
void interogare(int nd,int li,int ls)
{
if(a<=li && ls<=b)
{
max=(max<h[nd] ? h[nd] : max);
return ;
}
int mij=(li+ls)/2;
if(a<=mij)
interogare(2*nd,li,mij);
if(mij<b)
interogare(2*nd+1,mij+1,ls);
}
void creare_arb(int nd,int li,int ls)
{
if(li==ls)
{
h[nd]=val;
return ;
}
int mij=(li+ls)/2;
if(poz<=mij)
creare_arb(2*nd,li,mij);
else
creare_arb(2*nd+1,mij+1,ls);
h[nd]=(h[2*nd]>h[2*nd+1] ? h[2*nd] : h[2*nd+1]);
}