hihococer 1077 线段树

来源:互联网 发布:淘宝嘉年华持续时间 编辑:程序博客网 时间:2024/05/24 02:42

HIHO 1077



裸题, 直接zkw线段树



code:

/*adrui's submission language : C++Result : Acceptedlove : llfavorite : Dragon BallsStanding 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 debugfreopen("in.txt", "r", stdin);#endif //debugint q, t;while (~scanf("%d", &n)) {build();scanf("%d", &q);while (q--) {scanf("%d", &t);if (t)update();elseprintf("%d\n", query());}}return 0;}


1 0
原创粉丝点击