Pagini recente » Cod sursa (job #609080) | Cod sursa (job #2065796) | Cod sursa (job #2903805) | Cod sursa (job #472328) | Cod sursa (job #2194593)
#include <fstream>
#define MAX 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int MaxArb[4 * MAX + 66];
int val, pos, st, fs, maxx;;
class arboreDeIntervale
{
public:
void Update(int nod, int left, int right){
if(left == right){
MaxArb[nod] = val;
return;
}
int div = (left + right) / 2;
if(pos <= div)
Update(2 * nod, left, div);
else Update(2 * nod + 1, div + 1, right);
MaxArb[nod] = max(MaxArb[2 * nod], MaxArb[2 * nod + 1]);
}
void Query(int nod, int left, int right){
if(st <= left && right <= fs){
if(maxx < MaxArb[nod])
maxx = MaxArb[nod];
return;
}
int div = (left + right) / 2;
if(st <= div)
Query(2 * nod, left, div);
if(div < fs)
Query(2 * nod + 1, div + 1, right);
}
};
int main()
{
arboreDeIntervale p;
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; ++i){
int x;
fin >> x;
pos = i;
val = x;
p.Update(1, 1, n);
}
for(int i = 1; i <= m; ++i){
int x, a, b;
fin >> x >> a >> b;
if(x == 0){
maxx = -1;
st = a;
fs = b;
p.Query(1, 1, n);
fout << maxx << '\n';
}
else {
pos = a;
val = b;
p.Update(1, 1, n);
}
}
return 0;
}