lightOJ 1082 Array Queries

来源:互联网 发布:java简答题 编辑:程序博客网 时间:2024/06/13 21:20

模板水题,套模板。。。

#include <iostream>#include <cstdio>const int MAX = 1e5 + 5;int arr[5 * MAX];int num;void update(int st, int ed, int id, int pos, int val){if (st == pos && pos == ed){arr[id] = val;return ;}int m = (st + ed) >> 1;int l = id << 1, r = l | 1;if (pos <= m)update(st, m, l, pos, val);elseupdate(m + 1, ed, r, pos, val);arr[id] = std::min(arr[l], arr[r]);}int query(int st, int ed, int id, int q_st, int q_ed){if (q_st == st && q_ed == ed)return arr[id];int l = id << 1, r = l | 1;int m = (st + ed) >> 1;//std::cout << "zz" << std::endl;if (q_ed <= m)return query(st, m, l, q_st, q_ed);else if (q_st > m)return query(m + 1, ed, r, q_st, q_ed);elsereturn std::min(query(st, m, l, q_st, m), query(m + 1, ed, r, m + 1, q_ed));}int main(){std::ios::sync_with_stdio(false);int t, cas = 0;scanf("%d", &t);while (t--){int q;scanf("%d%d", &num, &q);int tmp;for (int i = 1; i <= num; ++i){scanf("%d", &tmp);update(1, num, 1, i, tmp);}int t1, t2;printf("Case %d:\n", ++cas);for (int i = 0; i != q; ++i){scanf("%d%d", &t1, &t2);printf("%d\n", query(1, num, 1, t1, t2));}}return 0;}


0 0
原创粉丝点击