Pagini recente » Cod sursa (job #799816) | Cod sursa (job #537677) | Cod sursa (job #389571) | Cod sursa (job #2718022) | Cod sursa (job #2657000)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 100005;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m;
int maxArb[N * 4];
void setValue(int index, int val, int left=1, int right=n, int node=1)
{
if(left == right)
{
maxArb[node] = val;
return;
}
int mid = (left + right) / 2;
if(index <= mid)
setValue(index, val, left, mid, 2*node);
else
setValue(index, val, mid+1, right, node * 2 + 1);
maxArb[node] = max(maxArb[node * 2], maxArb[node * 2 + 1]);
}
int query(int start, int finish, int left=1, int right=n, int node=1)
{
if(start <= left && right <= finish)
return maxArb[node];
int mid = (left + right) / 2;
int ans = 0;
if(start <= mid)
ans = max(ans, query(start, finish, left, mid, node * 2));
if(finish > mid)
ans = max(ans, query(start, finish, mid+1, right, node * 2 + 1));
return ans;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
int x;
fin >> x;
setValue(i, x);
}
for(int i = 0; i < m; i++)
{
int type, x, y;
fin >> type >> x >> y;
if(type == 0)
fout << query(x, y) << '\n';
else
setValue(x, y);
}
}