Pagini recente » Cod sursa (job #768333) | Cod sursa (job #2347279) | Cod sursa (job #1812030) | Cod sursa (job #827908) | Cod sursa (job #3228626)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
vector < int > aint;
int pos, val,ql,qr;
void update(int l , int r, int nod)
{
int mid=(l+r)/2;
if(l==r)
{
aint[nod]=val;
return ;
}
if(pos>=mid+1)
update(mid+1,r,2*nod+1);
if(pos<=mid)
update(l,mid,2*nod);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
int query(int l, int r , int nod)
{
int mid=(l+r)/2;
int ret=0;
if(l>=ql && r<=qr)
return aint[nod];
if(mid>=ql)
ret=max(ret,query(l,mid,2*nod));
if(mid+1<=qr)
ret=max(ret,query(mid+1,r,2*nod+1));
return ret;
}
int main()
{
int n,q,tip,a,b;
cin>>n>>q;
aint.resize(8*n+1);
for(int i=1;i<=n;i++)
{
cin>>a;
pos=i;
val=a;
update(1,n,1);
}
while(q--)
{
cin>>tip>>a>>b;
if(tip==0)
{
ql=a;
qr=b;
cout<<query(1,n,1)<<'\n';
}
else
{
pos=a;
val=b;
update(1,n,1);
}
}
return 0;
}