Pagini recente » Cod sursa (job #2947049) | Cod sursa (job #143517) | Cod sursa (job #487974) | Cod sursa (job #1393876) | Cod sursa (job #2695879)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, x, y;
int start, stop ,pos, val, maxi, maxVal[400005];
void Update(int nod, int left, int right)
{
if(left == right)
{
maxVal[nod] = val;
return ;
}
int mid = (left + right) / 2;
if(pos <= mid)
Update(2 * nod, left, mid);
else
Update(2 * nod + 1, mid + 1, right);
maxVal[nod] = max(maxVal[2 * nod], maxVal[2 * nod + 1]);
}
void Querry(int nod, int left, int right)
{
if(stop >= right && left >= start)
{
maxi = max(maxVal[nod], maxi);
return;
}
int mid = (left + right) / 2;
if(start <= mid)
Querry(2 * nod, left, mid);
if(stop > mid)
Querry(2 * nod + 1, mid + 1, right);
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
{
f >> val;
pos = i;
Update(1, 1, n);
}
for(int i = 1; i <= m; i++)
{
int task;
f >> task >> x >> y;
if(task == 0)
{
maxi = -1;
stop = y, start = x;
Querry(1, 1, n);
g << maxi << "\n";
}
else
{
pos = x;
val = y;
Update(1, 1, n);
}
}
return 0;
}