裸题, 直接zkw线段树
code:
/*
adrui's submission
language : C++
Result : Accepted
love : ll
favorite : Dragon Balls
Standing in the Hall of Fame
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define debug 0
#define inf 0x3f3f3f3f
#define M(a, b) memset(a, b, sizeof(a))
const int maxn = 1e6 + 5;
int mx[maxn << 2], n, M;
void build() {
M(mx, inf);
for (M = 1; M <= n + 1; M <<= 1);
for (int i = M + 1; i <= M + n; i++) {
scanf("%d", &mx[i]);
}
for (int i = M - 1; i; i--) {
mx[i] = min(mx[i << 1], mx[i << 1 | 1]);
}
}
void update() {
int a, b;
scanf("%d%d", &a, &b);
for (mx[a += M] = b, a >>= 1; a; a >>= 1)
mx[a] = min(mx[a << 1], mx[a << 1 | 1]);
}
int query() {
int l, r;
scanf("%d%d", &l, &r);
l += M - 1;
r += M + 1;
int ans = inf;
while (r ^ l ^ 1) {
if (~l & 1) {
ans = min(ans, mx[l + 1]);
}
if (r & 1) {
ans = min(ans, mx[r - 1]);
}
r >>= 1;
l >>= 1;
}
return ans;
}
int main() {
#if debug
freopen("in.txt", "r", stdin);
#endif //debug
int q, t;
while (~scanf("%d", &n)) {
build();
scanf("%d", &q);
while (q--) {
scanf("%d", &t);
if (t)
update();
else
printf("%d\n", query());
}
}
return 0;
}