Pagini recente » Cod sursa (job #1635558) | Cod sursa (job #235055) | Cod sursa (job #3286853) | Cod sursa (job #63824) | Cod sursa (job #1622050)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 10077777 ;
ifstream fin("arbint.in") ;
ofstream fout("arbint.out") ;
int arb[NMAX], A[NMAX] ;
int N, Q, result ;
void Query(int left, int right, int node, int X, int Y)
{
int middle = (left + right) / 2 ;
if(left >= X && right <= Y)
{
result = max(result, arb[node]) ;
return ;
}
if(X <= middle) Query(1, middle, 2 * node, X, Y) ;
if(Y > middle) Query(middle + 1, right, 2 * node + 1, X, Y) ;
}
void Update(int left, int right, int node, int pos)
{
int middle = (left + right) / 2 ;
if(left == right)
{
arb[node] = A[pos] ;
return ;
}
if(pos <= middle)
Update(left, middle, 2 * node, pos) ;
else
Update(middle + 1, right, 2 * node + 1, pos) ;
arb[node] = max(arb[2 * node], arb[2 * node + 1]) ;
}
int main()
{
fin >> N >> Q ;
for(int i = 1 ; i <= N ; ++ i)
{
fin >> A[i] ;
Update(1, N, 1, i) ;
}
while(Q -- )
{
int tip, a, b ;
fin >> tip >> a >> b ;
if(tip == 0)
{
result = 0 ;
Query(1, N, 1, a, b) ;
fout << result <<'\n';
}
else
{
A[a] = b ;
Update(1, N, 1, a) ;
}
}
fin.close() ;
fout.close() ;
return 0 ;
}