Pagini recente » Cod sursa (job #555261) | Cod sursa (job #420109) | Cod sursa (job #969091) | Cod sursa (job #1321467) | Cod sursa (job #1141736)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,x[1000005],poz,uj,k,Max,a,b,tip;
int update(int csp, int left, int right)
{
if (left == right)
{
x[csp] = uj;
return 0;
}
int k = (left+right)/2;
if (poz <= k) update(2*csp, left, k);
else update(2*csp+1, k+1, right);
x[csp] = max(x[2*csp], x[2*csp+1]);
}
int query(int csp, int left, int right)
{
if (a<=left && right<=b)
{
if (Max < x[csp]) Max = x[csp];
return 0;
}
int k = (left+right)/2;
if (a <= k) query(2*csp, left, k);
if (k < b) query(2*csp+1, k+1, right);
}
int main()
{
f >> n >> m;
for (i=1; i<=n; i++)
{
f >> uj;
poz = i;
update(1,1,n);
}
for (i=1; i<=m; i++)
{
f >> tip >> a >> b;
if (tip)
{
poz = a;
uj = b;
update(1,1,n);
}
else
{
Max = -1;
query(1,1,n);
g << Max << "\n";
}
}
}