Pagini recente » Cod sursa (job #1037667) | Cod sursa (job #1825079) | Cod sursa (job #1306776) | Cod sursa (job #2919853) | Cod sursa (job #1993842)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std ;
const int MAX = 1e5 + 14 ;
const int SQ = 1e5 + 14 ;
int readInt () {
bool minus = false;
int result = 0;
char ch;
ch = getchar();
while (true) {
if (ch == '-') break;
if (ch >= '0' && ch <= '9') break;
ch = getchar();
}
if (ch == '-') minus = true; else result = ch-'0';
while (true) {
ch = getchar();
if (ch < '0' || ch > '9') break;
result = result*10 + (ch - '0');
}
if (minus)
return -result;
else
return result;
}
int v [MAX] ;
int sq [SQ] ;
int main () {
freopen ("arbint.in", "r", stdin) ;
freopen ("arbint.out", "w", stdout) ;
int n, m ;
n = readInt() ;
m = readInt() ;
int rad = (int) sqrt ((double) n) ;
if (n > 30000)
rad /= 8;
for (int i = 0 ; i < n ; ++ i) {
v [i] = readInt() ;
sq [i / rad] = max (sq [i/rad], v[i]) ;
}
while (m --) {
int tip, a, b ;
tip = readInt() ;
a = readInt() ;
b = readInt() ;
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]) ;
}
printf("%d\n", best);
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' ;
}
printf("%d\n", best);
}
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 ;
}