Pagini recente » Cod sursa (job #132696) | Cod sursa (job #2857463) | Cod sursa (job #3237566) | Cod sursa (job #2319099) | Cod sursa (job #2447020)
#include <fstream>
int tree[400004], N, m, x, op, a, b;
std::ifstream fin("arbint.in");
std::ofstream fout("arbint.out");
void update(int value, int position, int left = 1, int right = N, int node = 1)
{
if(left == right)
{
tree[node] = value;
return;
}
int mid = (left + right) >> 1;
position <= mid ? update(value, position, left, mid, node << 1) : update(value, position, mid + 1, right, (node << 1) + 1);
tree[node] = (tree[node << 1] > tree[(node << 1) + 1]) ? tree[node << 1] : tree[(node << 1) + 1];
}
int query(int a, int b, int left = 1, int right = N, int node = 1)
{
if(a <= left && right <= b)
{
return tree[node];
}
int mid = (left + right) >> 1;
int MAX = 0;
if(a <= mid)
{
MAX = query(a, b, left, mid, node << 1);
}
if(b > mid)
{
int subresult = query(a, b, mid + 1, right, (node << 1) + 1);
MAX = MAX > subresult ? MAX : subresult;
}
return MAX;
}
int main()
{
fin >> N >> m;
for(int i = 1; i <= N; i++)
{
fin >> x;
update(x, i);
}
for(; m; m--)
{
fin >> op >> a >> b;
if(op == 0)
{
fout << query(a, b) << "\n";
}
else
{
update(b, a);
}
}
}