Pagini recente » Cod sursa (job #2256080) | Cod sursa (job #2102193) | Cod sursa (job #401501) | Cod sursa (job #244423) | Cod sursa (job #2360705)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int INF = 2e9;
int n, m;
vector <int> sTree;
void query(int a, int b)
{
int mx = -INF;
a += n - 1;
b += n;
while(a < b){
if(a & 1)
mx = max(mx, sTree[a++]);
if(b & 1)
mx = max(mx, sTree[--b]);
a >>= 1;
b >>= 1;
}
g << mx << '\n';
}
void update(int pos, int val)
{
pos += n - 1;
sTree[pos] = val;
while(pos > 0){
pos >>= 1;
sTree[pos] = max(
sTree[pos<<1], sTree[pos<<1|1]
);
}
}
int main()
{
int i, op, x, y;
f >> n >> m;
sTree = vector <int> (2 * (n+1), 0);
for(i=0; i<n; ++i){
f >> x;
sTree[n + i] = x;
}
for(i=n-1; i>0; --i)
sTree[i] = max(
sTree[i<<1], sTree[i<<1|1]
);
for(i=1; i<=m; ++i){
f >> op >> x >> y;
switch(op){
case 0:
query(x, y);
break;
case 1:
update(x, y);
break;
}
}
return 0;
}