Pagini recente » Cod sursa (job #1778633) | Istoria paginii concursuri | Profil Nicole | Istoria paginii downloads | Cod sursa (job #1795087)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,ans,arb[400010];
inline void update(int poz, int x)
{
arb[poz += n - 1] = x;
for(poz >>= 1; poz; poz >>= 1)
arb[poz] = max(arb[poz << 1], arb[poz << 1 | 1]);
}
inline int query(int st, int dr)
{
int rez = -1;
for(st += n - 1, dr += n; st < dr; st >>= 1, dr >>= 1)
{
if(st & 1)
rez = max(rez, arb[st++]);
if(dr & 1)
rez = max(rez, arb[--dr]);
}
return rez;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)
{
int x;
f>>x;
update(i, x);
}
for(int i=1;i<=m;++i)
{
int p,x,y;
f>>p>>x>>y;
if(p)
update(x, y);
else
{
g << query(x, y) << '\n';
}
}
return 0;
}