Pagini recente » Cod sursa (job #852928) | Cod sursa (job #754459) | Cod sursa (job #2178341) | Cod sursa (job #1239046) | Cod sursa (job #2117450)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int Nmax = 100000;
const int inf = (1 << 30);
int aint[4 * Nmax] , k , n , Q;
inline void Update(int p , int x)
{
int father;
aint[p] = x;
while(p >= 1)
{
father = p / 2;
aint[father] = max(aint[father * 2] , aint[father * 2 + 1]);
p = father;
}
}
inline void Read_Build()
{
int p , x;
fin >> k >> Q;
n = 1;
while(n < k)
n *= 2;
p = n;
for(int i = 1 ; i <= k ; i++)
{
fin >> x;
aint[p++] = x;
}
for(; p <= 2 * n - 1 ; p++)
aint[p] = - inf;
for(int i = n - 1 ; i >= 1 ; i--)
aint[i] = max(aint[2 * i] , aint[2 * i + 1]);
}
inline int Query(int k , int st , int dr , int x , int y)
{
if(st == x && dr == y)
return aint[k];
int m;
m = (st + dr) / 2;
if(m < x)
return Query(2 * k + 1 , m + 1 , dr , x , y);
else if(m >= y)
return Query(2 * k , st , m , x , y);
else return max(Query(2 * k , st , m , x , m) , Query(2 * k + 1 , m + 1 , dr , m + 1 , y ));
}
inline void Solve()
{
int op , x , y;
while(Q -- )
{
fin >> op;
if(op == 0)
{
fin >> x >> y;
fout << Query(1 , 1 , n , x , y) << "\n";
}
else
{
fin >> x >> y;
Update(n - 1 + x , y);
}
}
}
int main()
{
Read_Build();
Solve();
fin.close();
fout.close();
return 0;
}