Pagini recente » Cod sursa (job #3365507) | Cod sursa (job #3367500) | Cod sursa (job #3366388) | Cod sursa (job #3366386) | Cod sursa (job #3365120)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int MAX_N=100000;
int nxt_power2(int val)
{
return 1<<(32-__builtin_clz(val));
}
struct arb_int{
int v[4*MAX_N];
int n;
void init(int len)
{
n=nxt_power2(len);
for(int i=n; i<n+len; i++)
{
fin>>v[i];
}
}
void build()
{
for(int i=n-1; i>0; i--)
{
v[i]=max(v[2*i+1],v[2*i]);
}
}
void update(int pos, int val)
{
v[n+pos]=val;
pos+=n;
for(pos/=2; pos>0; pos/=2)
{
v[pos]=max(v[2*pos],v[2*pos+1]);
}
}
void query(int l, int r)
{
l=l+n;
r=r+n;
int maxim=0;
while(l<=r)
{
if(l%2==1)
{
maxim=max(v[l++],maxim);
}
l=l>>1;
if(r%2==0)
{
maxim=max(v[r--],maxim);
}
r=r>>1;
}
fout<<maxim<<'\n';
}
};
arb_int arbore;
int main()
{
int lung,q;
fin>>lung>>q;
arbore.init(lung);
arbore.build();
for(int i=1;i<=q;i++)
{
int tip;
fin>>tip;
if(tip==1)
{
int poz,val;
fin>>poz>>val;
arbore.update(poz-1,val);
}
else
{
int left,right;
fin>>left>>right;
arbore.query(left-1,right-1);
}
}
return 0;
}