Pagini recente » Cod sursa (job #2022870) | Cod sursa (job #981770) | Cod sursa (job #2486658) | Cod sursa (job #560739) | Cod sursa (job #1740139)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
long int arb[500001];
const int INF=(1<<30);
void update(int x,int y)
{
arb[x]=y;
while(x!=1)
{
x=x/2;
arb[x]=max(arb[x*2],arb[x*2+1]);
}
}
int query(int ql,int qr,int node,int nl,int nr)
{
if(nl>=ql && nr<=qr)
{
return arb[node];
}
else if(nr<ql || nl>qr)
{
return -INF;
}
else
{
int a,b;
a=query(ql,qr,node*2,nl,(nr+nl)/2);
b=query(ql,qr,node*2+1,(nr+nl)/2+1,nr);
return max(a,b);
}
}
int main()
{
int op,n,n2;
int i;
in>>n>>op;
for(n2=1; n2<n; n2*=2)
{}
for(i=n2; i<=n2+n-1; i++)
{
in>>arb[i];
}
for(i=n+n2; i<n2*2; i++)
{
arb[i]=-INF;
}
for(i=n-1; i>0; i--)
{
arb[i]=max(arb[i*2],arb[i*2+1]);
}
for(i=1; i<=op; i++)
{
int x,y,k;
in>>k>>x>>y;
if(k==1)
{
update(n2+x-1,y);
}
else
{
out<<query(x,y,1,1,n2)<<'\n';
}
}
return 0;
}