Pagini recente » Cod sursa (job #1867365) | Cod sursa (job #2192116) | Cod sursa (job #1563199) | Cod sursa (job #2647644) | Cod sursa (job #1906237)
#include <iostream>
#include <fstream>
using namespace std;
int maxArb[100000], pos, val, start, finish, maxim;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
inline int maximum(int a , int b) {
if(a < b) return b;
else return a;
}
inline int father(int nod) {
return nod / 2;
}
inline int lson (int nod) {
return nod * 2;
}
inline int rson (int nod) {
return nod * 2 + 1;
}
void Update (int nod, int left, int right) {
cout << left << "-" << right << '\n';
if (left == right) {
maxArb[nod] = val;
return;
}
int div = (left + right) / 2;
if (pos <= div) Update(lson(nod),left,div);
else Update(rson(nod),div+1,right);
cout << left << "-" << right << '\n';
maxArb[nod] = maximum(maxArb[lson(nod)], maxArb[rson(nod)]);
cout << "merge" << '\n';
}
void Querry (int nod, int left, int right) {
if (start <= left && finish <= right) {
if (maxim < maxArb[nod]) maxim = maxArb[nod];
return;
}
int div = (left+right) / 2;
if (start <= div) Querry(lson(nod),left,div);
if (finish > div) Querry(rson(nod),div+1,right);
}
int main()
{
int n, m;
fin >> n >> m;
for (int i=1; i <= n; i++) {
fin >> val;
pos = i;
Update(1,1,n);
}
for (int i=1; i <= m; i++) {
int x,a,b;
fin >> x >> a >> b;
if (x) {
pos = a; val = b;
Update(1,1,n);
}
else {
start = a; finish = b;
maxim = -1;
Querry(1,1,n);
cout << maxim << '\n';
}
}
return 0;
}