Pagini recente » Cod sursa (job #509542) | Cod sursa (job #2063458) | Cod sursa (job #2229162) | Cod sursa (job #1553222) | Cod sursa (job #2335816)
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
#define dim 100001
ifstream fi("arbint.in");
ofstream fo("arbint.out");
int MaxArb[4*dim+66];
int poz,val,start,finish,x,maximal;
int n,m;
int maxim(int a, int b)
{
if(a>b)
return a;
else
return b;
}
void update(int nod, int left, int right)
{
if(left==right)
{
MaxArb[nod]=val;
return;
}
int div=(left+right)/2;
if(poz<=div)
update(2*nod,left,div);
else
update(2*nod+1,div+1,right);
MaxArb[nod]=maxim(MaxArb[2*n],MaxArb[2*nod+1]);
}
void query(int nod, int left, int right)
{
if( start<=left && right<=finish )
{if(maximal < MaxArb[nod])
maximal = MaxArb[nod];
return;}
int div=(left+right)/2;
if( start <= div )
query(2*nod,left,div);
if( div < finish )
query(2*nod+1,div+1,right);
}
int main()
{
int yu;
fi>>n>>m;
for(int i=1;i<=n;i++)
{
fi>>yu;
val=yu;
poz=i;
update(1,1,n);
}
for(int i=1;i<=m;i++)
{
fi>>x;
if(x==0)
{
maximal=0;
fi>>start;
fi>>finish;
query(1,1,n);
fo<<maximal<<'\n';
}
else
{
fi>>poz;
fi>>val;
update(1,1,n);
}
}
return 0;
}