Pagini recente » Cod sursa (job #3168651) | Cod sursa (job #1422106) | Cod sursa (job #2623542) | Cod sursa (job #1466803) | Cod sursa (job #1620511)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, queries, v[NMax], intTree[NMax], cmd, a, b, Max;
int getMax(int a, int b)
{
if (a > b)
return a;
return b;
}
void update(int node, int left, int right, int val)
{
if (left == right)
intTree[node] = val;
else {
int mid = (left+right) / 2;
if (mid <= a)
update(2*node, 1, mid, val);
else
update(2*node + 1, mid+1, right, val);
intTree[node] = getMax(intTree[2*node], intTree[2*node+1]);
}
}
void getMax(int node, int left, int right)
{
if (a >= left && b <= right)
Max = getMax(Max, intTree[node]);
else {
int mid = (left + right) / 2;
if (a <= mid)
getMax(2*node, left, mid);
if (mid < right)
getMax(2*node + 1, mid+1, right);
}
}
int main()
{
f >> n >> queries;
for (int i=1; i<=n; i++) {
f>>v[i];
a = i;
update(1, 1, n, v[i]);
}
for (int i = 1; i <= queries; i++) {
f>>cmd>>a>>b;
if (cmd == 0) {
Max = -1;
getMax(1, 1, n);
g << Max<<"\n";
}
else
update(1, 1, n, b);
}
return 0;
}