Pagini recente » Cod sursa (job #164993) | Cod sursa (job #2549016) | Cod sursa (job #2544111) | Cod sursa (job #3179347) | Cod sursa (job #2478707)
#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,st));
}