Pagini recente » Diferente pentru utilizator/dandreica intre reviziile 3 si 2 | Cod sursa (job #1706264) | Cod sursa (job #1233062) | Cod sursa (job #1455471) | Cod sursa (job #2757183)
#include <iostream>
#include <fstream>
using namespace std;
int t[1000000], poz, val, a, b, n, q;
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 interogare(int p,int st,int dr)
{
if(a<=st && dr<=b)
return t[p];
int m=(st+dr)/2,rezst=0,rezdr=0;
if(a<=m)
rezst=interogare(2*p,st,m);
if(m<b)
rezdr=interogare(2*p+1,m+1,dr);
return max(rezst,rezdr);
}
int main()
{
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> n >> q;
for (poz=1; poz<=n; poz++)
{
in >> val;
actualizare(1, 1, n);
}
while (q)
{
q--;
bool tip;
in >> tip;
if (tip)
{
in >> poz >> val;
actualizare(1, 1, n);
}
else
{
in >> a >> b;
out << interogare(1, 1, n) << '\n';
}
}
return 0;
}