Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Diferente pentru utilizator/space.folding intre reviziile 4 si 3 | Cod sursa (job #3307460) | Cod sursa (job #1071931)
#include <fstream>
#define nr 400001
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int a[nr];
int ii, fi,v,poz, ma;
int Maxim(int a, int b) {
if ( a > b ) return a;
return b;
}
void Up(int x,int i,int f)
{
if (i==f)
{
a[x]=v;
return;
}
int mij=(i+f)/2;
if (poz<=mij) Up(2*x,i,mij);
else Up(2*x+1,mij+1,f);
a[x]=Maxim(a[2*x],a[2*x+1]);
}
void Q(int x,int i,int f)
{
if (ii<=i && f<=fi)
{
if (ma<a[x]) ma=a[x];
return;
}
int mij=(i+f)/2;
if (ii<=mij) Q(2*x,i,mij);
if (mij<fi) Q(2*x+1,mij+1,f);
}
int main()
{int n,m,x,i,z,y;
in>>n>>m;
for (i=1;i<=n;i++)
{
in>>x;
v=x;poz=i;
Up(1,1,n);
}
for (i=1;i<=m;i++)
{
in>>z>>x>>y;
if (z==0)
{
ma =-1;
ii=x; fi=y;
Q(1,1,n);
out<<ma<<"\n";
}
else
{
poz=x;v=y;
Up(1,1,n);
}
}
}