Pagini recente » Cod sursa (job #218574) | Cod sursa (job #2091166) | Cod sursa (job #1690222) | Cod sursa (job #1043058) | Cod sursa (job #1064622)
#include <fstream>
using namespace std;
int n,m;
int maxarb[500008];
int start, fin, val,loc, maxim;
void update(int,int,int);
void maxint (int,int,int);
int main(){
int a,b,c;
ifstream in("arbint.in");
ofstream out("arbint.out");
in>>n>>m;
for (int i=1;i<=n;i++)
{
in>>a;
loc=i;
val=a;
update(1,1,n);
}
for (int i=1;i<=m;i++)
{
in>>a>>b>>c;
if(a==0)
{
maxim=-1;
start=b;
fin=c;
maxint(1,1,n);
out<<maxim<<"\n";
}
else
{
loc=b;
val=c;
update(1,1,n);
}
}
in.close();
out.close();
return 0;
}
void update(int nod, int st, int dr)
{
if(st==dr)
{
maxarb[nod]=val;
return;
}
int div=(st+dr)>>1;
if(loc<=div)
update(nod<<1,st,div);
else
update((nod<<1)+1,div+1,dr);
maxarb[nod]=maxarb[nod<<1]>maxarb[(nod<<1)+1]?maxarb[nod<<1]:maxarb[(nod<<1)+1];
}
void maxint(int nod, int st, int dr)
{
if(start<=st&&dr<=fin)
{
if (maxim<maxarb[nod] ) maxim=maxarb[nod];
return;
}
int div = (st+dr)>>1;
if(start<=div)
maxint(nod<<1,st,div);
if(div<fin)
maxint((nod<<1)+1,div+1,dr);
}