Pagini recente » Cod sursa (job #1993681) | Cod sursa (job #787879) | Cod sursa (job #664398) | Cod sursa (job #2519736) | Cod sursa (job #2567139)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = 1<<18;
int n,q,z,p=1,t,a,b,aint[N],getMax(int,int,int);
int main()
{
f>>n>>q;
while(p<n)p*=2;
z=p-1;
for(int i=1;i<=n;i++)
f>>aint[z+i];
for(int i=z;i>=1;i--)
aint[i]=max(aint[2*i],aint[2*i+1]);
for(;q;q--)
{
f>>t>>a>>b;
if(t==0)
g<<getMax(1,1,p)<<'\n';
else
{
a+=z;
aint[a]=b;
for(a/=2;a;a/=2)
aint[a]=max(aint[2*a],aint[2*a+1]);
}
}
return 0;
}
int getMax(int nod,int st,int dr)
{
if(a>dr||st>b)
return 0;
if(a<=st&&dr<=b)
return aint[nod];
int mi=(st+dr)/2;
return max(getMax(2*nod,st,mi),getMax(2*nod+1,mi+1,dr));
}