Pagini recente » Cod sursa (job #804149) | Cod sursa (job #458226) | Cod sursa (job #1609388) | Cod sursa (job #1597607) | Cod sursa (job #2556437)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,baza,C;
int tree[270000];
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 maxim=0;
while(a<=b)
{
if(a%2==1)
maxim=max(maxim,tree[a]),a++;
if(b%2==0)
maxim=max(maxim,tree[b]),b--;
a/=2,b/=2;
}
return maxim;
}
int main()
{
in>>n>>C;
baza=pow( 2, (int)log2(n)+ ( log2(n)>(int)log2(n) ? 1 : 0 ) )+0.5;
for(int i=baza;i<=baza+n-1;i++)
in>>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,i=1;i<=C;i++)
{
in>>q>>a>>b;
if(q==1)
update(a,b);
else
out<<maxim(a,b)<<'\n';
}
return 0;
}