hdu 1754 I Hate It(最简单的线段树)
2015-08-22 10:20
483 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754
没有任何变型,所以直接贴代码。
没有任何变型,所以直接贴代码。
#include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> #include <queue> using namespace std; const int maxn = 200005; const int oo = 0xfffffff; #define L_CHILD rt<<1, begin, mid #define R_CHILD rt<<1|1, mid + 1, end int segTree[maxn*4]; void pushUp(int rt) { segTree[rt] = max(segTree[2*rt], segTree[2*rt+1]); } void build(int rt, int begin, int end) { if(begin == end) { scanf("%d", segTree + rt); return ; } int mid = begin + end >> 1; build(L_CHILD); build(R_CHILD); pushUp(rt); } int query(int rt, int begin, int end, int left, int right) { if(left > end || right < begin) { return -oo; } if(left <= begin && end <= right) { return segTree[rt]; } int mid = begin + end >> 1; int p1 = query(L_CHILD, left, right); int p2 = query(R_CHILD, left, right); return max(p1, p2); } void update(int rt, int begin, int end, int idx, int val) { if(begin == end) { segTree[rt] = val; return ; } int mid = begin + end >> 1; if(idx <= mid) { update(L_CHILD, idx, val); } else { update(R_CHILD, idx, val); } pushUp(rt); } int main() { int n, m, x, y; char ch; while (scanf("%d%d", &n, &m) != EOF) { build(1, 1, n); while (m --) { scanf(" %c%d%d", &ch, &x, &y); if(ch == 'Q') { printf("%d\n", query(1,1,n,x,y)); } else { update(1, 1, n, x, y); } } } return 0; }
相关文章推荐
- UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo 手动脱壳
- Objective-C基础知识点
- UVA 10422 Knights in FEN
- Jquery各Ajax函数
- 关于大型网站技术演进的思考(五)--存储的瓶颈(5)
- 一种管理多人会话的方法、装置及系统
- hdu 1166 敌兵布阵(线段树、树状数组)
- php登录源码实现
- 倒置英文句子中单词的字母顺序
- 关于大型网站技术演进的思考(四)--存储的瓶颈(4)
- Objective-C基础知识点
- vc 串口通讯类封装
- n节点组成二叉树的个数
- STL
- 关于大型网站技术演进的思考(三)--存储的瓶颈(3)
- Linux命令之 reboot、shutdown、halt、poweroff
- HDOJ 5406 CRB and Apple 树状数组优化DP
- 支持向量机之对偶学习算法(二)
- c++的赋值构造函数以及vector::push_back的问题
- 在MFC中使用SDL2.0(SDL窗口嵌入到MFC中)