[HihoCoder]#1077 : RMQ问题再临-线段树
2016-07-26 10:32
267 查看
华电北风吹
天津大学认知计算与应用重点实验室
2016-07-26
题目链接:
http://hihocoder.com/problemset/problem/1077
题目分析:
模板题目,但是利用C++里面的输入输出流会有超时错误,修改为C语言的输入输出就没问题。
参考代码:
天津大学认知计算与应用重点实验室
2016-07-26
题目链接:
http://hihocoder.com/problemset/problem/1077
题目分析:
模板题目,但是利用C++里面的输入输出流会有超时错误,修改为C语言的输入输出就没问题。
参考代码:
#include <stdio.h> #include <algorithm> using namespace std; #define INT_MAX 0x7fffffff struct node { int leftID, rightID; int minVal; }; node data[4000000 + 10]; int father[1000000 + 2]; void Build(int i, int left, int right) { int middle = (left + right) >> 1; data[i].leftID = left; data[i].rightID = right; data[i].minVal = INT_MAX; if (left == right) { father[left] = i; return; } Build(i << 1, left, middle); Build(i << 1 | 1, middle + 1, right); } void Update(int id) { if (id == 1) { return; } int father = id >> 1; data[father].minVal = min(data[father << 1].minVal, data[father << 1 | 1].minVal); Update(id >> 1); } void Query(int i, int l, int r, int & result) { if (data[i].leftID == l&&data[i].rightID == r) { result = min(result, data[i].minVal); return; } int middle = (data[i].leftID + data[i].rightID) >> 1; if (l <= middle) { if (r <= middle) { Query(i << 1, l, r, result); } else { Query(i << 1, l, middle, result); } } if (r >= middle + 1) { if (l >= middle + 1) { Query(i << 1 | 1, l, r, result); } else { Query(i << 1 | 1, middle + 1, r, result); } } } int main() { int n, m; scanf("%d", &n); Build(1, 1, n); for (int i = 1; i <= n; i++) { scanf("%d", &data[father[i]].minVal); Update(father[i]); } scanf("%d", &m); int flag, left, right, pos, val; for (int i = 0; i<m; i++) { scanf("%d", &flag); if (flag == 0) { scanf("%d%d", &left, &right); int result = INT_MAX; Query(1, left, right, result); printf("%d\n", result); } else { scanf("%d%d", &pos, &val); data[father[pos]].minVal = val; Update(father[pos]); } } return 0; }
相关文章推荐
- 1086. Tree Traversals Again (25)
- UVA 10943 How do you add?
- 编译预处理
- Menu菜单
- RFID Hacking④:使用ProxMark3 破解门禁
- LeetCode--Binary Tree Traversal ( Inorder, Preorder, PostOrder)
- WordPress查询文章作者的文章数及WordPress用户角色/权限
- ThreadPoolManager
- 持久化修改Android模拟器的system分区
- String 和StringBuffer,StringBuilder的区别
- POJ-2524-Ubiquitous Religions
- 游戏编程中的人工智能技术-扫雷机系列
- Codevs 1074 食物链 2001年NOI全国竞赛
- Android 模仿微信长按录音功能
- 数据结构实验之二叉树五:层序遍历
- JavaScript从0开始构思表情插件
- CentOS 下安装 Memcache
- Linux下登录Oracle命令行时删除键^H解决方法
- 简单工厂模式---(2)
- Python 命令行输出的颜色设置