Pagini recente » Cod sursa (job #114678) | Cod sursa (job #980104) | Cod sursa (job #2569521) | Cod sursa (job #2048710) | Cod sursa (job #627115)
Cod sursa(job #627115)
#include<fstream>
using namespace std;
#define xx 100001
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int m,n,arb[5*xx],a,b,maxim,poz,val;
void creare_arb(int nd,int li,int ls)
{
if(li==ls)
{
arb[nd]=val; return;
}
int mij=(li+ls)/2;
if(poz<=mij)
creare_arb(nd*2,li,mij);
else
creare_arb(nd*2+1,mij+1,ls);
arb[nd]=(arb[2*nd]>arb[2*nd+1] ? arb[2*nd] : arb[2*nd+1]);
}
void interogare(int nd,int li,int ls)
{
if(a<=li && ls<=b)
{
if(maxim<arb[nd]) maxim=arb[nd];
return;
}
int mij=(li+ls)/2;
if(a<=mij)
interogare(nd*2,li,mij);
if(mij<b)
interogare(nd*2+1,mij+1,ls);
}
int main()
{
int i,op;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a;
poz=i;
val=a;
creare_arb(1,1,n);
}
for(i=1;i<=m;i++)
{
fin>>op>>a>>b;
if(op)
{
poz=a;
val=b;
creare_arb(1,1,n);
}
else
{
maxim=0;
interogare(1,1,n);
fout<<maxim<<'\n';
}
}
fout.close();
return 0;
}