Pagini recente » Cod sursa (job #2140991) | Cod sursa (job #2791176) | Cod sursa (job #1262170) | Cod sursa (job #1776671) | Cod sursa (job #2209750)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N=1 << 18, INF=999999999;
int t[N];
int poz,val,a,b;
int intergoare (int p, int st, int dr)
{
if (a<=st && b>=dr)
return t[p];
int m=(st+dr) / 2, r= -INF;
if (a<=m)
{
r=max(r, intergoare( 2*p , st ,m ));
}
if (b>m)
{
r=max(r, intergoare( 2*p+1 , m+1 , dr ));
}
return r;
}
void actualizare(int p, int st, int dr)
{
if (st==dr)
{
t[p]=val;
return;
}
int m=(st+dr)/2;
if (poz<=m)
{
actualizare(2*p,st,m);
}
else
{
actualizare(2*p+1,m+1,dr);
}
t[p]=max( t[ 2*p ], t[ 2*p+1 ] );
}
int main()
{
int n,m,o,i;
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>val;
poz=i;
actualizare(1,1,n);
}
for (i=1;i<=m;i++)
{
f>>o;
if (o==1) {
f >> poz >> val;
actualizare(1,1,n);
}
if (o==0) {
f >> a >> b;
g<<intergoare(1,1,n)<<"\n";
}
}
return 0;
}