Pagini recente » Cod sursa (job #1955372) | Cod sursa (job #1125728) | Cod sursa (job #304437) | Cod sursa (job #3201117) | Cod sursa (job #3230865)
#include <iostream>
#include <fstream>
using namespace std;
int aint[100], poz=0, val=0, a, b, maxx=0;
void update(int, int, int);
void search_aint(int, int, int);
int main()
{
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
int n, k, op, nr;
cin >> n >> k;
for (int i=0; i<n; i++)
{
cin >> nr;
poz = i+1;
val = nr;
update(1, 1, n);
}
for (int i=0; i<k; i++)
{
cin >> op >> a >> b;
if (op == 0)
{
maxx = 0;
search_aint(1, 1, n);
cout << maxx << endl;
}
else
{
poz = a;
val = b;
update(1, 1, n);
}
}
return 0;
}
void update(int nod, int st, int dr)
{
if (st == dr) /// bottom of the tree (coroana)
{
aint[nod] = val;
return;
}
int mid = (st + dr) / 2; /// delimitarea intervalelor
if (poz <= mid)
{
update(2*nod, st, mid);
}
else
{
update((2*nod)+1, mid+1, dr);
}
aint[nod] = max (aint[2*nod], aint[2*nod+1]); /// care e cel mai mare din interval (verifici ce are sub)
}
void search_aint(int nod, int st, int dr)
{
if ((a <= st) && (dr <= b)) // ?
{
if (aint[nod] > maxx)
{
maxx = aint[nod];
}
return;
}
int mid = (st + dr) / 2;
if (a <= mid)
{
search_aint(2*nod, st, mid);
}
if (mid < b)
{
search_aint(2*nod+1, mid+1, dr);
}
}
/**
1(1-5)
2(1-3) 3(4-5)
4(1-2) 5(3) 6(4) 7(5)
8(1) 9(2)
5 5
4 3 5 6 1
**/