Pagini recente » Cod sursa (job #1239636) | Monitorul de evaluare | Cod sursa (job #1139871) | Cod sursa (job #603012) | Cod sursa (job #832801)
Cod sursa(job #832801)
#include <fstream>
#include <iostream>
using namespace std;
int arb[400000];
int n,m,val,pos,a,b;
int l,r;
int max1;
ifstream in("arbint.in");
ofstream out("arbint.out");
int maxim(int a, int b)
{
if (a>b) return a;
else return b;
}
void actualizeaza(int st, int dr, int nod)
{
if (st==dr)
{
arb[nod]=val;
return;
}
else
{
int mij=(st+dr)/2;
if (pos<=mij)
actualizeaza(st,mij,2*nod);
else
actualizeaza(mij+1,dr,2*nod+1);
arb[nod]=maxim(arb[2*nod],arb[2*nod+1]);
}
}
void intreaba(int st, int dr, int nod)
{
if ( (l<=st) && (dr<=r) )
{
if (max1<arb[nod]) max1=arb[nod];
return ;
}
else
{
int mij=(st+dr)/2;
if (l<=mij)
intreaba(st,mij,2*nod);
if (r>mij)
intreaba(mij+1,dr,2*nod+1);
}
}
int main()
{
in>>n;
in>>m;
int i;
for (i=1;i<=n;i++)
{
in>>val;
pos=i;
actualizeaza(1,n,1);
}
int t;
while (m)
{
in>>t>>a>>b;
if (t!=0)
{
pos=a;
val=b;
actualizeaza(1,n,1);
/*for (i=1;i<=n;i++) out<<arb[i]<<' ';
out<<'\n';*/
}
else
{ max1=-1;
l=a;
r=b;
intreaba(1,n,1);
out<<max1<<"\n";
}
m--;
}
return 0;
}