Pagini recente » Cod sursa (job #2668864) | Cod sursa (job #1514605) | Cod sursa (job #2433145) | Cod sursa (job #1336306) | Cod sursa (job #1944968)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[200000], poz, value, a, b, valoare;
inline void coboara(int st, int dr, int nod_curent)
{
if (poz == st && st == dr) ///cand am gasit pozitia pe care trebuie pus elementul
{
v[nod_curent] = valoare;
}
else
{
int mij = (st + dr) / 2;
if (poz <= mij) ///daca intervalul in care e cuprins elementul este cel din stanga
{
coboara(st, mij, nod_curent * 2);
}
else
{
coboara(mij + 1, dr, nod_curent * 2 + 1);
}
v[nod_curent] = max(v[nod_curent * 2 + 1], v[nod_curent * 2]);
}
}
inline int ask(int st, int dr, int nod)
{
if (st >= a && dr <= b)
{
return v[nod];
}
else
{
int r1 = 0, r2 = 0;
int mij = (st + dr) / 2;
if (mij >= a)
{
r1 = ask(st, mij, nod * 2);
}
if (mij < b)
{
r2 = ask(mij + 1, dr, nod * 2 + 1);
}
return max(r1, r2);
}
}
inline void Read()
{
int n, m, cer;
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
poz = i;
fin >> valoare;
coboara(1, n, 1);
}
for (int i = 1; i <= m; i++)
{
fin >> cer >> a >> b;
if (cer == 1)
{
poz = a; value = b; coboara(1, n, 1);
}
else
fout << ask(1, n, 1) << "\n";
}
}
int main ()
{
Read();
fin.close(); fout.close(); return 0;
}