Pagini recente » Cod sursa (job #1301825) | Istoria paginii runda/oni_10_0/clasament | Istoria paginii runda/pboji | Istoria paginii runda/alex001/clasament | Cod sursa (job #2434975)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m;
int arb[2*100010];
void update(int index,int value)
{
index+=n;
arb[index]=value;
while(index)
{
index/=2;
arb[index]=max(arb[2*index],arb[2*index+1]);
}
}
int query(int left,int right)
{
int maximum = -100000;
left+=n;
right+=n;
while(left<right)
{
if(left%2)
{
maximum=max(maximum,arb[left]);
left++;
}
if(right%2)
{
right--;
maximum=max(maximum,arb[right]);
}
left/=2,right/=2;
}
return maximum;
}
void construct()
{
for(int i = n-1;i>0;i--)
arb[i]=max(arb[2*i],arb[2*i+1]);
}
int main()
{
int q,a,b;
fin>>n>>m;
for(int i = 0;i<n;i++)
fin>>arb[i+n];
construct();
while(m--)
{
fin>>q>>a>>b;
if(q)
{
update(a-1,b);
}
else
{
fout<<query(a-1,b)<<'\n';
}
}
//for(int i = 1;i<=2*n;i++)
// cout<<arb[i]<<" ";
return 0;
}