Pagini recente » Cod sursa (job #316699) | Cod sursa (job #1341412) | Cod sursa (job #361320) | Cod sursa (job #1014606) | Cod sursa (job #1060640)
#include<iostream>
#include<fstream>
using namespace std;
int n, m;
int a[262145], L, R, val, poz, maxim;
inline int Max(int a, int b)
{ return (a > b ? a : b);
}
void build(int nod, int stg, int drt)
{
if (stg == drt)
{
a[nod] = val;
return;
}
int m = (stg+drt)>>1, fs = nod<<1;
if (poz <= m) build(fs, stg, m);
else build(fs+1, m+1, drt);
a[nod] = Max(a[fs], a[fs+1]);
}
void get_max(int nod, int stg, int drt)
{
if (L <= stg && drt <= R)
if (maxim < a[nod])
maxim = a[nod];
else
{ int m = (stg+drt)>>1, fs = nod<<1; //(stg+drt)/2 nod*2
if (L <= m) get_max(fs, stg, m);
if (m < R) get_max(fs+1, m+1, drt);
}
}
int main()
{ifstream f("arbint.in");
ofstream g("arbint.out");
int a, b, c, i;
f>>n>>m;
for (i=1;i<=n;++i)
{f>>c;
poz = i;
val = c;
build(1, 1, n);
}
for (i=1;i<=m;++i)
{f>>c>>a>>b;
if (!c)
{
maxim = 0;
L = a; R = b;
get_max(1, 1, n);
g<<maxim<<"\n";
}
else
{ poz = a, val = b;
build(1, 1, n);
}
}
f.close();
g.close();
system("pause");
return 0;
}