Pagini recente » Cod sursa (job #690695) | Istoria paginii utilizator/stoicatheo | Istoria paginii utilizator/laura1999 | Cod sursa (job #758914) | Cod sursa (job #432873)
Cod sursa(job #432873)
#include<fstream>
#include<cstdio>
using namespace std;
int ai[262000],poz,val,a,b,maxim;
/*
void afis(int n)
{
for(int i=1; i<=n; ++i)
printf("%d ",ai[i]);
printf("\n");
}*/
void adauga(int nod, int s, int d)
{
if(s==d) ai[nod]=val;
else
{
int m=(s+d)/2;
if(poz<=m) adauga(nod*2,s,m);
else adauga(nod*2+1,m+1,d);
if(ai[nod*2]>ai[nod*2+1]) ai[nod]=ai[nod*2];
else ai[nod]=ai[nod*2+1];
}
}
void detmax(int nod, int s, int d)
{
if(a<=s && d<=b)
{
if(ai[nod]>maxim) maxim=ai[nod];
}
else
{
int m=(s+d)/2;
if(m>=a) detmax(nod*2,s,m);
if(m+1<=b) detmax(nod*2+1,m+1,d);
}
}
int main()
{
ifstream fin("arbint.in");
freopen("arbint.out","w",stdout);
int n,m,x;
fin>>n>>m;
for(int i=1; i<=n; ++i)
{
fin>>x;
poz=i;
val=x;
adauga(1,1,n);
//afis(n);
}
for(int i=1; i<=m; ++i)
{
fin>>x>>a>>b;
if(x==0)
{
maxim=0;
detmax(1,1,n);
printf("%d\n", maxim);
}
else
{
poz=a;
val=b;
adauga(1,1,n);
}
}
return 0;
}