Pagini recente » Cod sursa (job #1020936) | Cod sursa (job #293835) | Cod sursa (job #2474479) | Cod sursa (job #2068946) | Cod sursa (job #2222879)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 2e5+5;
int aint[NMAX],n;
void update(int k, int val)
{
k+=n;
aint[k] = val;
for (; k>1; k>>=1)
aint[k>>1] = max(aint[k],aint[k^1]);
}
int query(int st, int dr)
{
int ans = 0;
st+=n;
dr+=n;
for (; st<dr; st>>=1, dr>>=1)
{
if (st&1)
ans = max(ans,aint[st++]);
if (dr&1)
ans = max(ans,aint[--dr]);
}
return ans;
}
int main()
{
int m;
in >> n >> m;
for (int i = 0; i<n; i++)
in >> aint[i+n];
for (int i = n-1; i>0; i--)
aint[i] = max(aint[i<<1],aint[i<<1|1]);
for (int i = 0; i<m; i++)
{
int t,x,y;
in >> t >> x >> y;
if (t == 1)
update(x-1,y);
else
out << query(x-1,y) << "\n";
}
}