Pagini recente » Cod sursa (job #1777606) | Cod sursa (job #1294666) | Cod sursa (job #1959876) | Cod sursa (job #1186490) | Cod sursa (job #3143574)
#include <iostream>
#include <vector>
using namespace std;
const int NMAX = 1e5;
int n, m;
int arraySize = 1;
vector<int> arbint;
void update(int pos, int val)
{
int i = pos + arraySize - 1;
arbint[i] = val;
do
{
i >>= 1;
arbint[i] = max(arbint[2*i], arbint[2*i+1]);
}
while(i > 0);
}
int query(int nod, int st, int dr, int stQ, int drQ)
{
if(stQ <= st && dr <= drQ)
return arbint[nod];
int mid = (st + dr) / 2;
int aux = 0;
if(stQ <= mid)
aux = max(aux, query(2 * nod, st, mid, stQ, drQ));
if(mid < drQ)
aux = max(aux, query(2 * nod + 1, mid + 1, dr, stQ, drQ));
return aux;
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
cin >> n >> m;
while(arraySize < n) arraySize <<= 1;
arbint.resize(2*arraySize, 0);
for(int i = arraySize; i < n + arraySize; ++i)
cin >> arbint[i];
for(int i = arraySize-1; i > 0; i--)
arbint[i] = max(arbint[2*i], arbint[2*i+1]);
bool t;
int a, b;
while(m--)
{
cin >> t >> a >> b;
if(t) update(a, b);
else cout << query(1, 1, arraySize, a, b) << '\n';
}
}