Pagini recente » Cod sursa (job #3133910) | Cod sursa (job #2382763) | Cod sursa (job #3163865) | Cod sursa (job #2496562) | Cod sursa (job #2514505)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,baza;
int tree[270001];
void update(int poz,int val)
{
poz+=baza-1;
tree[poz]=val;
poz/=2;
while(poz)
{
tree[poz]=max(tree[poz*2],tree[poz*2+1]);
poz/=2;
}
}
int maxim(int a,int b)
{
a+=baza-1;
b+=baza-1;
int valMax=-1;
while(a<=b)
{
if(a%2==1)
valMax=max(valMax,tree[a]),a++;
if(b%2==0)
valMax=max(valMax,tree[b]),b--;
a/=2,b/=2;
}
return valMax;
}
int main()
{
cin>>n>>m;
baza=pow( 2 , (int)log2(n)+(log2(n)>(int)log2(n)?1:0) );
for(int i=baza;i<=baza+n-1;i++)
cin>>tree[i];
for(int k=baza/2;k;k/=2)
for(int i=k;i<=k*2-1;i++)
tree[i]=max(tree[i*2],tree[i*2+1]);
for(int q,a,b,k=1;k<=m;k++)
{
cin>>q>>a>>b;
if(q==0)
cout<<maxim(a,b)<<'\n';
else
update(a,b);
}
return 0;
}