I Hate It
code
#include <bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ACM_LOCAL
using namespace std;
typedef long long ll;
const double PI = acos ( - 1 ) ;
const double eps = 1e-4 ;
const int MOD = 1e9 + 7 ;
const int M = 1e7 + 10 ;
const int N = 3e5 + 10 ;
int n, m, a[ N] ;
struct node {
int l, r;
int maxx;
} seg[ N << 2 ] ;
void pushup ( int rt) {
seg[ rt] . maxx = max ( seg[ rt << 1 ] . maxx, seg[ rt << 1 | 1 ] . maxx) ;
}
void build ( int rt, int l, int r) {
seg[ rt] = { l, r, 0 } ;
if ( l == r) {
seg[ rt] . maxx = max ( seg[ rt] . maxx, a[ l] ) ;
return ;
}
int mid = l + r >> 1 ;
build ( rt << 1 , l, mid) ;
build ( rt << 1 | 1 , mid + 1 , r) ;
pushup ( rt) ;
}
void modify ( int rt, int l, int r, int x) {
if ( l <= seg[ rt] . l && seg[ rt] . r <= r) {
seg[ rt] . maxx = max ( seg[ rt] . maxx, x) ;
return ;
}
int mid = seg[ rt] . l + seg[ rt] . r >> 1 ;
if ( l <= mid) modify ( rt << 1 , l, r, x) ;
if ( mid < r) modify ( rt << 1 | 1 , l, r, x) ;
pushup ( rt) ;
}
int query ( int rt, int l, int r) {
if ( l <= seg[ rt] . l && seg[ rt] . r <= r) {
return seg[ rt] . maxx;
}
int mid = seg[ rt] . l + seg[ rt] . r >> 1 ;
int maxx = 0 ;
if ( l <= mid) maxx = max ( maxx, query ( rt << 1 , l, r) ) ;
if ( mid < r) maxx = max ( maxx, query ( rt << 1 | 1 , l, r) ) ;
return maxx;
}
int l, r;
string op;
void solve ( ) {
if ( op[ 0 ] == 'Q' ) {
cout << query ( 1 , l, r) << endl;
} else if ( op[ 0 ] == 'U' ) {
modify ( 1 , l, l, r) ;
}
}
int main ( ) {
IO;
#ifdef ACM_LOCAL
freopen ( "input" , "r" , stdin ) ;
freopen ( "output" , "w" , stdout ) ;
#endif
int o = 1 , cases = 0 ;
while ( o -- ) {
while ( cin >> n >> m) {
for ( int i = 1 ; i <= n; ++ i) cin >> a[ i] ;
build ( 1 , 1 , n) ;
while ( m-- ) {
cin >> op >> l >> r;
solve ( ) ;
}
}
}
return 0 ;
}