Pagini recente » Cod sursa (job #142962) | Cod sursa (job #2566205) | tema | Cod sursa (job #560502) | Cod sursa (job #2939336)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = 1<<18; /// 2^18 = 1 shiftat de 18 ori spre dreapta
int n,p,q,st,dr,A[N];
int getMax(int nod,int lo,int hi)
{
if(lo>dr||st>hi)///intervalele nu se intersecteaza
return 0;
if(st<=lo&&hi<=dr) /// nodul controleaza [lo,hi] inclus in [st,dr]
return A[nod];
int mi=(lo+hi)/2;
return max(getMax(2*nod,lo,mi),getMax(2*nod+1,mi+1,hi));
}
int main()
{
f>>n>>q;
p=1;
while(p<n)p*=2;
for(int i=1;i<=n;i++)
f>>A[p-1+i];
for(int i=p-1;i>=1;i--)
A[i]=max(A[2*i],A[2*i+1]);
for(int i=1;i<=q;i++)
{
int tip;
f>>tip;
if(tip==0)
{
f>>st>>dr;
g<<getMax(1,1,p)<<'\n';
}
else
{
int poz,val;
f>>poz>>val;
poz=p-1+poz;
A[poz]=val;
poz/=2;
while(poz>=1)
{
A[poz]=max(A[2*poz],A[2*poz+1]);
poz/=2;
}
}
}
return 0;
}