Pagini recente » Cod sursa (job #1029488) | Cod sursa (job #2689856) | Cod sursa (job #720752) | Cod sursa (job #1820142) | Cod sursa (job #221621)
Cod sursa(job #221621)
#include<fstream>
using namespace::std;
ifstream in("arbint.in");
ofstream out("arbint.out");
long val,pos,n,m,*arb,x,a,b,maxim,start,sf;
int max(int a,int b)
{if(a>b) return a;
return b;
}
void update(int nod,int left,int right)
{if(left==right)
{arb[nod]=val;return;}
int div=(left+right)/2;
if(pos<=div) update(2*nod,left,div);
else update(2*nod+1,div+1,right);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int left,int right)
{if(start<=left && right<=sf)
{if(maxim<arb[nod])maxim=arb[nod];return;}
int div=(left+right)/2;
if(start<=div) query(2*nod,left,div);
if(div<sf) query(2*nod+1,div+1,right);
}
int main()
{in>>n>>m;
for(int i=1;i<=n;i++)
{in>>val;pos=i;
update(1,1,n);}
for(;m;m--)
{in>>x>>a>>b;
if(x==0){maxim=-1;start=a;sf=b;query(1,1,n);out<<maxim<<'\n';}
else{pos=a;val=b;update(1,1,n);}}
return 0;
}