HDU 1754
2015-07-13 17:58
405 查看
线段树,求区间的最值,更新单点的值。
比较坑的是:
首先忘记了max的头文件,导致一直CE,
再次读字符前忘记吃掉空格,但是不知道为什么一直TE,文件读不到结尾,O__O"…。 板刷TLE, orz。
AC代码:
比较坑的是:
首先忘记了max的头文件,导致一直CE,
再次读字符前忘记吃掉空格,但是不知道为什么一直TE,文件读不到结尾,O__O"…。 板刷TLE, orz。
AC代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxx 200010 int sco[maxx<<2]; int n,k; void find_max(int rt) { sco[rt]=max(sco[rt<<1],sco[rt<<1|1]); } void build(int l,int r,int rt) { if(l==r) { scanf("%d",&sco[rt]); return; } int m=(l+r)>>1; build(lson); build(rson); find_max(rt); } void change(int p,int ch,int l,int r,int rt) { if(l==r) { sco[rt]=ch; return; } int m=(l+r)>>1; if(p<=m) change(p,ch,lson); else change(p,ch,rson); find_max(rt); } int query(int left,int right,int l,int r,int rt) { if(left<=l&&right>=r) return sco[rt]; int m=(l+r)>>1; int ans=0; if(left<=m) { ans=max(ans,query(left,right,lson)); } if(right>m) { ans=max(ans,query(left,right,rson)); } return ans; } int main() { int n,m; while (~scanf("%d%d",&n,&m)) { build(1 , n , 1); while (m --) { char c; int a , b; getchar(); scanf("%c%d%d",&c,&a,&b); if (c== 'Q') printf("%d\n",query(a , b , 1 , n , 1)); else change(a , b , 1 , n , 1); } } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解