Pagini recente » Cod sursa (job #2415772) | Cod sursa (job #2510848) | Cod sursa (job #2313158) | Cod sursa (job #1612975) | Cod sursa (job #2902457)
#include<iostream>
#include<fstream>
using namespace std;
int n, m, i, x, arb[400000], a, b, maxim1;
void adaug(int nod,int st, int dr,int poz) {
if (st == dr)
{
arb[nod] = x;
return;
}
int mid = (st + dr) / 2;
if (poz <= mid)
adaug(nod*2,st, mid,poz);
else
adaug(nod*2+1,mid+1, dr,poz);
arb[nod] = max(arb[2 * nod + 1], arb[2 * nod]);
}
void maxim(int nod, int st, int dr) {
if (a <= st and b >= dr)
{
maxim1 = max(maxim1, arb[nod]);
return;
}
int mid = (st + dr) / 2;
if (a <= mid)
maxim(2 * nod, st, mid);
if (b > mid)
maxim(2 * nod + 1, mid + 1, dr);
}
int main() {
ifstream f("arbint.in");
ofstream g("arbint.out");
f >> n >> m;
for (i = 1; i <= n; i++)
{
f >> x;
adaug(1, 1, n, i);
}
for (i = 1; i <= m; i++)
{
f >> x;
if (x == 1)
{
f >> a >> x;
adaug(1, 1, n , a);
}
if (x == 0)
{
f >> a >> b;
maxim1 = 0;
maxim(1, 1, n);
g << maxim1 << "\n";
}
}
return 0;
}