Pagini recente » Cod sursa (job #3140728) | Cod sursa (job #2818460) | Cod sursa (job #1247318) | Cod sursa (job #1173033) | Cod sursa (job #3134168)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int arb[100000000];
void rescrie(int x, int b)
{
int t;
arb[x] = b;
while (x > 1)
{
t = x / 2;
arb[t] = max(arb[t * 2 + 1], arb[t * 2]);
x = t;
}
}
int maxim(int nod, int x, int y, int st, int dr)
{
if (x == st && y == dr) return arb[nod];
int mij = (st + dr) / 2;
if (y <= mij)
return maxim(nod * 2, x, y, st, mij);
if (x >= mij + 1)
return maxim(nod * 2 + 1, x, y, mij + 1, dr);
return max(maxim(nod * 2, x, mij, st, mij), maxim(nod * 2 + 1, mij + 1, y, mij + 1, dr));
}
int main()
{
ifstream fin("../arbint.in");
ofstream fout("../arbint.out");
int n, m, j, o, a, b;
fin >> n >> m;
for (j = 1; j < n; j = j*2);
for (int i = j; i < n + j; i++)
fin >> arb[i];
n = j;
for (int i = n - 1; i >= 1; i--)
arb[i] = max(arb[2 * i], arb[2 * i + 1]);
while(m)
{
fin >> o >> a >> b;
if (o == 0)
fout << maxim(1, a, b, 1, n) << endl;
else
rescrie(n - 1 + a, b);
m--;
}
return 0;
}