Pagini recente » Cod sursa (job #872478) | Cod sursa (job #2668218) | Cod sursa (job #2560248) | Cod sursa (job #2784935) | Cod sursa (job #2478711)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = (1<<18)+1;
int n,m,z,lo,hi,aint[N],query(int,int,int);
int main()
{
f>>n>>m;
z=1;while(z<n)z*=2;
z=z-1;
for(int i=1;i<=n;i++)f>>aint[z+i];
for(int i=z;i;i--)aint[i]=max(aint[2*i],aint[2*i+1]);
for(;m;m--)
{
int o;
f>>o;
if(o)
{
int i,val;
f>>i>>val;i+=z;aint[i]=val;
for(i/=2;i;i/=2)aint[i]=max(aint[2*i],aint[2*i+1]);
}
else
{
f>>lo>>hi;
g<<query(1,1,z+1)<<'\n';
}
}
return 0;
}
int query(int nod,int st,int dr)
{
if(lo<=st&&dr<=hi)
return aint[nod];
if(lo>dr||st>hi)
return 0;
int mi=(st+dr)/2;
return max(query(2*nod,st,mi),query(2*nod+1,mi+1,dr));
}