Pagini recente » Cod sursa (job #3128981) | Cod sursa (job #2792238) | Cod sursa (job #1204554) | Cod sursa (job #2781364) | Cod sursa (job #1993835)
#include <fstream>
#include <cmath>
using namespace std ;
ifstream cin ("arbint.in") ;
ofstream cout ("arbint.out") ;
const int MAX = 1e5 + 14 ;
const int SQ = 2300 ;
int v [MAX] ;
int sq [SQ] ;
int main () {
int n, m ;
cin >> n >> m ;
int rad = (int) sqrt ((double) n) ;
if (n > 30000)
rad >>= 2 ;
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 ;
int dr = b / rad ;
for (int i = st + 1 ; i < dr ; ++ i) {
best = max (best, sq [i]) ;
//cout << "a intrat pe bucata " << i << '\n' ;
}
if (st == dr) {
for (int i = a ; i <= b ; ++ i) {
best = max (best, v[i]) ;
}
cout << best << '\n' ;
continue ;
}
for (int i = a ; i / rad == st ; ++ i) {
best = max (best, v [i]) ;
//cout << "a intrat pe pozitia " << i << '\n' ;
}
for (int i = b ; i / rad == dr ; -- i) {
best = max (best, v [i]) ;
//cout << "a intrat pe pozitia " << i << '\n' ;
}
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 ;
}