Pagini recente » Cod sursa (job #3187793) | Cod sursa (job #1500787) | Cod sursa (job #1991993) | Cod sursa (job #1405453) | Cod sursa (job #563120)
Cod sursa(job #563120)
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[nmax], a, b, n, k, cod, maxed;
inline int maxim(int x, int y)
{
if(x > y)
return x;
return y;
}
void query(int nod, int st, int dr)
{
if(a <= st && dr <= b)
{
if(maxed < arb[nod])
maxed = arb[nod];
return;
}
int m = (st+dr)/2;
if(a <= m) query(2*nod, st, m);
if(m < b) query(2*nod + 1, m+1, dr);
}
void update(int nod, int st, int dr)
{
if(st == dr)
{
arb[nod] = b;
return ;
}
int m = (st+dr)/2;
if(a <= m) update(2*nod, st, m);
else update(2*nod + 1, m+1, dr);
arb[nod] = maxim(arb[2*nod], arb[2*nod+1]);
}
int main()
{
int i, v;
fin >> n >> k;
for(i = 1; i <= n; ++ i)
{
fin >> v;
a = i;
b = v;
update(1, 1, n);
}
for(i = 1; i <= k; ++ i)
{
fin >> cod >> a >> b;
if(cod == 0)
{
maxed = -1;
query(1, 1, n);
fout << maxed << "\n";
}
else
update(1, 1, n);
}
return 0;
}