Pagini recente » Cod sursa (job #2014204) | Cod sursa (job #2284889) | Profil Saitama | Profil florinhaja | Cod sursa (job #1477943)
#include <bits/stdc++.h>
using namespace std;
const int kMax = (int) 2 * 1e5 + 4;
const int lowInf = ~(1 << 30);
const int blockSize = 512;
int n, m;
int v[kMax];
int go[blockSize >> 1];
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
void read(){
fin >> n >> m;
for (int i = 0; i < n; ++i)
fin >> v[i];
}
void build(){
for (int i = 0 ; i < n ; ++ i)
go[i / blockSize] = max(go[i / blockSize], v[i]);
}
inline void update (int i, int val){
int where = i / blockSize;
go[where] = 0;
v[i] = val;
for (int j = where * blockSize; j < (where + 1) * blockSize; ++j)
go[where] = max(go[where], v[j]);
}
inline int query (int a, int b){
int ret = lowInf ;
for (; a % blockSize and a <= b; a++)
ret = max(ret, v[a]);
for (; a + blockSize <= b; a += blockSize)
ret = max(ret, go[a / blockSize ]);
for (; a <= b; ++a)
ret = max(v[a], ret);
return ret;
}
inline void solve(){
for (int q = 0; q < m; ++q){
int now, a, b;
fin >> now >> a >> b;
if (!now)
fout << query(a - 1, b - 1) << "\n";
else
update(a - 1, b);
}
}
int main(){
read();
build();
solve();
}