Pagini recente » Cod sursa (job #1724212) | Cod sursa (job #333739) | Cod sursa (job #476065) | Cod sursa (job #967429) | Cod sursa (job #1863334)
#pragma GCC optimize (O3)
#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 1e5 + 10;
ifstream f("arbint.in");
ofstream g("arbint.out");
char buf[maxn], *p = buf, *ep = buf + sizeof(buf);
static void adv(){
if(++p == ep) f.read(p=buf, sizeof(buf)); }
static void setup_parsare(){
f.read(buf, sizeof(buf)); }
static int get_int(){
int rhs = 0;
while(*p < '0') adv();
while(*p >= '0') rhs = 10 * rhs + *p - '0', adv();
return rhs; }
int n, m, v[maxn], arb[2*maxn] = {};
static void build_arbint(){
copy(v, v+n, arb+n);
for(int i = n-1; i; --i) arb[i] = max(arb[2*i], arb[2*i+1]); }
static void update(int poz, const int val){
arb[poz += n] = val;
for(poz /= 2; poz; poz /= 2)
arb[poz] = max(arb[2*poz], arb[2*poz+1]); }
static int query(int st, int dr){
int r = 0;
for(st += n, dr += n+1; st < dr; st /= 2, dr /= 2){
if(st%2) r = max(r, arb[st++]);
if(dr%2) r = max(r, arb[--dr]); }
return r; }
int main(){
n = get_int(), m = get_int();
for(int i = 0; i < n; ++i) v[i] = get_int();
build_arbint();
for(int i = 0, t, a, b; i < m; ++i){
t = get_int(), a = get_int(), b = get_int();
if(t == 0) g << query(a-1, b-1) << '\n';
else update(a-1, b); }
return 0; }