Pagini recente » Cod sursa (job #2768002) | Cod sursa (job #1726636) | Cod sursa (job #1486193) | Cod sursa (job #2126377) | Cod sursa (job #936519)
Cod sursa(job #936519)
#include <fstream>
using namespace std;
int main() {
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m;
fin >> n >> m;
int size = 1;
while (size < n) size *= 2;
int a[2*size]; //segment tree
for (int i = size; i < size+n; ++i)
fin >> a[i];
for (int i = size+n; i < 2*size; ++i)
a[i] = 0;
for (int i = size-1; i > 0; --i)
a[i] = max(a[2*i], a[2*i+1]);
int q, b, c;
for (; m > 0; --m) {
fin >> q >> b >> c;
if (q == 0) {
b += size-1; c += size-1;
while (b <= c) {
q = max(q, max(a[b], a[c]));
b = b%2? b/2+1 : b/2;
c = c%2? c/2 : c/2-1;
}
fout << q << '\n';
}
else {
b += size-1;
a[b] = c;
while (b > 1) {
b /= 2;
a[b] = max(a[2*b], a[2*b+1]);
}
}
}
return 0;
}