Pagini recente » Statistici Coman Cosmin (nemilosu) | Cod sursa (job #830786) | Cod sursa (job #2589389) | Cod sursa (job #261169) | Cod sursa (job #2759391)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 2 << 18, INF = 1e9;
int t[NMAX], n, m, tip, a, b, poz, val;
int interogare(int p, int st, int dr)
{
if(a <= st && dr <= b) return t[p];
int mij = (st + dr) / 2, fs = 2*p, fd = 2*p + 1;
int rs = -INF, rd = -INF;
if(a <= mij) rs = interogare(fs, st, mij);
if(b >= mij + 1) rd = interogare(fd, mij + 1, dr);
return max(rs, rd);
}
void actualizare(int p, int st, int dr)
{
if(st == dr) {
t[p] = val;
return;
}
int mij = (st + dr) / 2, fs = 2*p, fd = 2*p + 1;
if(poz <= mij){
actualizare(fs, st, mij);
}
else{
actualizare(fd, mij + 1, dr);
}
t[p] = max(t[fs], t[fd]);
}
int main()
{
in >> n >> m;
for(int i = 1; i <= n; i++)
{
in >> val;
poz = i;
actualizare(1, 1, n);
}
for(int i = 1; i <= m; i++)
{
in >> tip >> a >> b;
poz = a;
val = b;
if(tip == 0)
{
out << interogare(1, 1, n) << "\n";
}
else
{
actualizare(1, 1, n);
}
}
return 0;
}