Pagini recente » Cod sursa (job #2730270) | Cod sursa (job #442781) | Cod sursa (job #700600) | PreOJI 2016 - Clasament - Clasele 11-12 | Cod sursa (job #1960585)
#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 1e5 + 100;
int arb[2*maxn] = {};
char ibuf[maxn], obuf[maxn];
void update(int p, const int val){
arb[p+=maxn] = val;
for(p/=2; p; p/=2) arb[p] = max(arb[2*p], arb[2*p+1]); }
int query(int st, int dr){
int rez = 0;
for(st+=maxn, dr+=maxn+1; st < dr; st /= 2, dr /= 2){
if(st%2) rez = max(rez, arb[st++]);
if(dr%2) rez = max(rez, arb[--dr]); }
return rez; }
ifstream f;
ofstream g;
int main(){
f.rdbuf()->pubsetbuf(ibuf, maxn);
g.rdbuf()->pubsetbuf(obuf, maxn);
f.open("arbint.in");
g.open("arbint.out");
int n, q;
f >> n >> q;
for(int i = 1; i <= n; ++i) f >> arb[i+maxn];
for(int i = maxn-1; i; --i) arb[i] = max(arb[2*i], arb[2*i+1]);
for(int i = 0, t, a, b; i < q; ++i){
f >> t >> a >> b;
if(t == 0) g << query(a, b) << '\n';
else update(a, b); }
return 0; }