Pagini recente » Cod sursa (job #2743078) | Cod sursa (job #2104584) | Cod sursa (job #1180013) | Cod sursa (job #1066125) | Cod sursa (job #2065206)
#include <bits/stdc++.h>
using namespace std;
int n, m, a[100100], sz, nr, block[1010], cod, x, y;
void build(){
int st = 1, dr = sz, rs;
while(dr <= n){
rs = 0;
for(int i = st; i <= dr; i++)
rs = max(rs, a[i]);
block[++nr] = rs;
st = dr + 1;
dr += sz;
}
}
int solve(int st, int dr){
int p = st, rs = 0, cur;
while(p % sz != 1 && p <= dr)
rs = max(a[p++], rs);
cur = p / sz + 1;
while(p + sz - 1 <= dr){
rs = max(block[cur], rs);
p += sz;
cur++;
}
while(p <= dr)
rs = max(a[p++], rs);
return rs;
}
void update(int x, int y){
a[x] = y;
int p = x / sz + ((x % sz) != 0);
int rs = 0, st = (p - 1) * sz + 1, dr = min(st + sz, n + 1);
for(int i = st; i < dr; i++)
rs = max(rs, a[i]);
block[p] = rs;
}
int main(){
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> n >> m;
for(int i = 1; i <= n; i++)
in >> a[i];
sz = int(sqrt(n));
build();
for(int i = 1; i <= m; i++){
in >> cod >> x >> y;
if(cod)
update(x, y);
else
out << solve(x, y) << '\n';
}
return 0;
}