Pagini recente » Cod sursa (job #903819) | Cod sursa (job #1020408) | Cod sursa (job #3358927) | Cod sursa (job #2661830) | Cod sursa (job #2661829)
//
// main.cpp
// arbint
//
// Created by Eusebiu Rares on 22/10/2020.
// Copyright © 2020 Eusebiu Rares. All rights reserved.
//
#include <iostream>
#include <fstream>
#include <cmath>
std::fstream in ("arbint.in", std::ios::in) ;
std::fstream out ("arbint.out", std::ios::out) ;
const int NMAX = 1e5 ;
int v[1 + NMAX] ;
int rad[1 + NMAX] ;
int buc[1 + NMAX] ;
int SQRT ;
int maxim(int left, int right) {
int leftRad = rad[left] ;
int rightRad = rad[right] ;
if (leftRad == rightRad) {
int ret(0) ;
for (int i = left ; i <= right ; ++ i) {
ret = std::max(ret, v[i]) ;
}
return ret ;
}
int retLeft(0) ;
for (int i = left ; i <= leftRad * SQRT ; ++ i) {
retLeft = std::max(retLeft, v[i]) ;
}
int retRight(0) ;
for (int i = (rightRad - 1) * SQRT + 1 ; i <= right ; ++ i) {
retRight = std::max(retRight, v[i]) ;
}
int ret = std::max(retLeft, retRight) ;
for (int i = leftRad + 1 ; i <= rightRad - 1 ; ++ i) {
ret = std::max(ret, buc[i]) ;
}
return ret ;
}
void change(int position, int value) {
int respRad = rad[position] ;
v[position] = value ;
buc[respRad] = 0 ;
for (int i = (respRad - 1) * SQRT + 1 ; i <= respRad * SQRT ; ++ i) {
buc[respRad] = std::max(buc[respRad], v[i]) ;
}
}
int main(int argc, const char * argv[]) {
int n, m, type, x, y ;
in >> n >> m ;
SQRT = sqrt(n) ;
for (int i = 1 ; i <= n ; ++ i) {
in >> v[i] ;
rad[i] = 1 ;
}
for (int i = SQRT + 1 ; i <= n ; ++ i) {
rad[i] = rad[i - SQRT] + 1 ;
}
for (int i = 1 ; i <= n ; ++ i) {
buc[rad[i]] = std::max(buc[rad[i]], v[i]) ;
}
for (int i = 1 ; i <= m ; ++ i) {
in >> type >> x >> y ;
if (type == 0) {
int ans = maxim(x, y) ;
out << ans << '\n' ;
} else {
change(x, y) ;
}
}
}