Pagini recente » Cod sursa (job #1711021) | Cod sursa (job #195508) | Cod sursa (job #615939) | Cod sursa (job #880983) | Cod sursa (job #2636072)
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, m, a[100001], ma[400001], c, p, v, s, d;
void build (int poz, int st, int dr) {
if (st == dr) {
ma[poz] = a[st];
return;
}
int mij = (st + dr) / 2;
build (poz * 2, st, mij);
build (poz * 2 + 1, mij + 1, dr);
ma[poz] = max (ma[poz * 2], ma[poz * 2 + 1]);
}
void update (int poz, int st, int dr) {
if (st == dr) {
ma[poz] = v;
return;
}
int mij = (st + dr) / 2;
if (p <= mij)
update (poz * 2, st, mij);
else
update (poz * 2 + 1, mij + 1, dr);
ma[poz] = max (ma[poz * 2], ma[poz * 2 + 1]);
}
int query (int poz, int st, int dr) {
if (st > d or s > dr)
return 0;
if (s <= st and dr <= d)
return ma[poz];
int mij = (st + dr) / 2;
int s1 = query (poz * 2, st, mij);
int s2 = query (poz * 2 + 1, mij + 1, dr);
return max (s1, s2);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> a[i];
build (1, 1, n);
while (m--) {
fin >> c;
if (c == 0) {
fin >> s >> d;
fout << query (1, 1, n) << '\n';
}
else {
fin >> p >> v;
update (1, 1, n);
}
}
return 0;
}