Pagini recente » Cod sursa (job #1485431) | Cod sursa (job #2368394) | Cod sursa (job #638994) | Cod sursa (job #2293171) | Cod sursa (job #212060)
Cod sursa(job #212060)
#include <fstream>
using namespace std;
long arb[500000],n,m,val,poz,start,finish,maxi;
long maxim(long a,long b)
{
return (a>b)?a:b;
}
void constr(int nod,int st,int dr)
{
if(st>dr) return;
if(st==dr)
{
arb[nod]=val;
return;
}
int left=nod<<1;
int right=(nod<<1)+1;
int mid=(st+dr)>>1;
if(poz<=mid)
constr(left,st,mid);
else constr(right,mid+1,dr);
arb[nod]=maxim(arb[left],arb[right]);
}
void query(int nod,int st,int dr)
{
if(start<=st&&finish>=dr)
{
if(maxi<arb[nod])
maxi=arb[nod];
return;
}
int mid=(st+dr)>>1;
if(start<=mid)
query(nod<<1,st,mid);
if(finish>mid)
query((nod<<1)+1,mid+1,dr);
}
void citire()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
int x;
for(int i=1;i<=n;i++)
{
f>>x;
val=x;
poz=i;
constr(1,1,n);
}
for(int i=1;i<=m;i++)
{
int a,b;
f>>x>>a>>b;
if(x==0){
start=a;
finish=b;
maxi=-1;
query(1,1,n);
g<<maxi<<"\n";
}
else
{
poz=a;
val=b;
constr(1,1,n);
}
}
}
int main()
{
citire();
return 0;
}