Pagini recente » Cod sursa (job #2327286) | Cod sursa (job #2294091) | Cod sursa (job #2651838) | Cod sursa (job #2281119) | Cod sursa (job #2578208)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int N_MAX = 1e5 + 1;
int segment_tree[4*N_MAX], N, M;
void update(int value, int index, int left = 1, int right = N, int node = 1)
{
if(left == right)
{
segment_tree[node] = value;
return;
}
int middle = (left + right) / 2;
if(index <= middle)
update(value, index, left, middle, node * 2);
else
update(value, index, middle + 1, right, node * 2 + 1);
segment_tree[node] = max(segment_tree[node * 2], segment_tree[node * 2 + 1]);
}
int query(int first, int last, int left = 1, int right = N, int node = 1)
{
if(first <= left && last >= right)
return segment_tree[node];
int middle = (left + right) / 2;
int answer = 0;
if(first <= middle)
answer = max(answer, query(first, last, left, middle, node * 2));
if(last > middle)
answer = max(answer, query(first, last, middle + 1, right, node * 2 + 1));
return answer;
}
int main()
{
fin >> N >> M;
for(int x, i = 1; i <= N; ++i)
{
fin >> x;
update(x, i);
}
for(int c, a ,b, i = 1; i <= M; ++i)
{
fin >> c >> a >> b;
if(c == 0)
fout << query(a, b) << '\n';
else
update(b, a);
}
}