Pagini recente » Istoria paginii utilizator/raluca_vacaru | Cod sursa (job #446918) | Cod sursa (job #2991284) | Cod sursa (job #668864) | Cod sursa (job #1993814)
#include <fstream>
#include <cmath>
using namespace std ;
ifstream cin ("arbint.in") ;
ofstream cout ("arbint.out") ;
const int MAX = 1e5 + 14 ;
const int SQ = 300 ;
int v [MAX] ;
int sq [SQ] ;
int main () {
int n, m ;
cin >> n >> m ;
int rad = (int) sqrt ((double) n) ;
if (n > 30000)
rad >>= 1;
for (int i = 0 ; i < n ; ++ i) {
cin >> v [i] ;
sq [i / rad] = max (sq [i/rad], v[i]) ;
}
while (m --) {
int tip, a, b ;
cin >> tip >> a >> b ;
if (tip == 0) {
a -= 1 ;
b -= 1 ;
int best = 0 ;
int st = a / rad ;
st += 1 ;
int dr = b / rad ;
dr -= 1 ;
for (int i = st ; i <= dr ; ++ i) {
best = max (best, sq [i]) ;
}
for (int i = a ; ; ++ i) {
if (i / rad == st) {
break ;
}
best = max (best, v [i]) ;
}
for (int i = b ; ; -- i) {
if (i / rad == dr) {
break ;
}
best = max (best, v [i]) ;
}
cout << best << '\n' ;
}
else {
a -= 1 ;
v [a] = b ;
int st = a / rad ;
st += 1 ;
sq [st - 1] = 0 ;
for (int i = a - a % rad ; ; ++ i) {
if (i / rad == st) {
break ;
}
sq [i / rad] = max (sq [i / rad], v [i]) ;
}
}
}
return 0 ;
}