Pagini recente » Cod sursa (job #2044069) | Cod sursa (job #259769) | Cod sursa (job #22448) | Cod sursa (job #1303340) | Cod sursa (job #408067)
Cod sursa(job #408067)
#include<fstream>
#define dmax 400001
using namespace std;
long n,m,poz,val,maxim,inceput,sfarsit;
long arbore[dmax];
void query(long nod, long stanga, long dreapta)
{
long div;
if (inceput<= stanga && dreapta<=sfarsit)
{
if (maxim<arbore[nod])
maxim=arbore[nod];
return ;
}
div=(stanga+dreapta)/2;
if (inceput<=div)
query(2*nod,stanga,div);
if (div<sfarsit)
query(2*nod+1,div+1,dreapta);
}
void actualizare(long nod, long stanga, long dreapta)
{
long div;
if (stanga==dreapta)
{
arbore[nod]=val;
return ;
}
div=(stanga+dreapta)/2;
if (poz<=div)
actualizare(2*nod,stanga,div); else
actualizare(2*nod+1,div+1,dreapta);
if (arbore[2*nod]>arbore[2*nod+1])
arbore[nod]=arbore[2*nod]; else
arbore[nod]=arbore[2*nod+1];
}
int main()
{
long i,nr,op,a,b;
ifstream fin("arblong.in");
ofstream fout("arblong.out");
fin>>n>>m;
for (i=1; i<=n; i++)
{
fin>>nr;
poz=i;
val=nr;
actualizare(1,1,n);
}
for (i=1; i<=m; i++)
{
fin>>op>>a>>b;
if (op==0) /*determinarea maximului din longervalul [a,b]*/
{
maxim=-1;
inceput=a;
sfarsit=b;
query(1,1,n);
fout<<maxim<<'\n';
} else
{ /*elementul de pe pozitia a va deveni b*/
poz=a;
val=b;
actualizare(1,1,n);
}
}
fin.close();
fout.close();
return 0;
}