Pagini recente » Cod sursa (job #2909474) | Cod sursa (job #1627105) | Cod sursa (job #1602615) | Cod sursa (job #1932319) | Cod sursa (job #1204216)
#include <fstream>
using namespace std;
int n,m,adi[400000],x,tip,y,maxim;
void init (int st,int dr,int nod)
{
if (st==dr)
{
adi[nod]=y;
}else
{
int m=(st+dr)/2;
if (x<=m) init(st,m,nod*2);else init(m+1,dr,nod*2+1);
adi[nod]=adi[nod*2]; if (adi[nod*2+1]>adi[nod]) adi[nod]=adi[nod*2+1];
}
}
void scoate(int st,int dr,int nod)
{
if (x<=st && dr<=y)
{
if (maxim<adi[nod]) maxim=adi[nod];
}else
{
int m=(st+dr)/2;
if (x<=m) scoate(st,m,nod*2);
if (y>m) scoate(m+1,dr,nod*2+1);
}
}
int main()
{
ifstream in ("arbint.in");
ofstream out ("arbint.out");
in>>n>>m;
for (int i=1;i<=n;++i)
{
in>>y;
x=i;
init(1,n,1);
}
for (int i=1;i<=m;++i)
{
in>>tip>>x>>y;
if (tip==0)
{
maxim=0;
scoate(1,n,1);
out<<maxim<<"\n";
}else
{
init(1,n,1);
}
}
in.close();
out.close();
return 0;
}