Pagini recente » Cod sursa (job #2444704) | Cod sursa (job #670955) | Cod sursa (job #2162087) | Cod sursa (job #1633410) | Cod sursa (job #1993811)
#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 = 1 ; i <= n ; ++ i) {
cin >> v [i] ;
sq [i / rad] = max (sq [i/rad], v[i]) ;
}
v[0] = 1 << 30 ;
while (m --) {
int tip, a, b ;
cin >> tip >> a >> b ;
if (tip == 0) {
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 {
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 ;
}