HDU1754 I Hate It
2015-10-28 09:37
447 查看
解题思路:求区间最大值,线段树模板题,不解释:
View Code
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define inf 0x3f3f3f3f #define lson l, m, rt << 1 #define rson m+1, r, rt << 1 | 1 const int maxn = 200005; int A[maxn<<2], n, m, a, b; char str[10]; void Max(int rt) { A[rt] = max(A[rt<<1], A[rt<<1 | 1]); } void Build(int l, int r, int rt) { if(l == r) { scanf("%d", &A[rt]); return ; } int m = (l + r) >> 1; Build(lson); Build(rson); Max(rt); } void Update(int p, int score, int l, int r, int rt) { if(l == r) { A[rt] = score; return ; } int m = (l + r) >> 1; if(p <= m) Update(p, score, lson); else Update(p, score, rson); Max(rt); } int Query(int ll, int rr, int l, int r, int rt) { if(ll <= l && rr >= r) return A[rt]; int m = (l + r) >> 1; int max1 = -inf; if(ll <= m) max1 = max(max1, Query(ll, rr, lson)); if(rr > m) max1 = max(max1, Query(ll, rr, rson)); return max1; } int main() { while(~scanf("%d %d", &n, &m)) { Build(1, n, 1); while(m--) { scanf("%s%d%d", str, &a, &b); if(str[0] == 'Q') { int ans = Query(a, b, 1, n, 1); printf("%d\n", ans); } else Update(a, b, 1, n, 1); } } return 0; }
View Code
相关文章推荐
- Linux的tee命令
- Spring随笔2
- linux input子系统(二)- input event drivers evdev 驱动分析
- Leetcode -- Expression Add Operators
- Xcode技巧 - 3
- android项目导包问题的解决方案
- android基础之页面间跳转传值,用Bundle+Intent
- js获取web项目根目录
- 读取文本
- jqueryeasy ui 的 accordion 和 tabs控件
- eclipse中一些常见svn图标的含义,超全的
- Hive学习
- 互联网是一巨大的FPGA
- POJ 2139
- intellij Idea快捷键
- Ogre动画加载之节点动画、mesh动画及骨骼动画加载方法
- Spring -- 如何在spring中读取properties配置文件里面的信息
- 用enum类型数据解决switch case选择字符串的问题
- JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
- js进行页面传值