[HihoCoder]#1077 : RMQ问题再临-线段树
来源:互联网 发布:交流软件英文怎么说 编辑:程序博客网 时间:2024/06/08 05:09
华电北风吹
天津大学认知计算与应用重点实验室
2016-07-26
题目链接:
http://hihocoder.com/problemset/problem/1077
题目分析:
模板题目,但是利用C++里面的输入输出流会有超时错误,修改为C语言的输入输出就没问题。
参考代码:
#include <stdio.h>#include <algorithm>using namespace std;#define INT_MAX 0x7fffffffstruct 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;}
0 0
- hihoCoder 1077 RMQ问题再临-线段树
- hihocoder 1077 : RMQ问题再临-线段树
- hihoCoder #1077-> RMQ问题再临-线段树
- [HihoCoder]#1077 : RMQ问题再临-线段树
- hihocoder #1077 RMQ问题再临-线段树
- hihoCoder #1070 : RMQ问题再临(线段树)
- hihoCoder 1077 RMQ问题再临-线段树 单点修改,求区间最小值
- HiHo #1070 && 1077 : RMQ问题再临 【RMQ-线段树】
- #1077 : RMQ问题再临-线段树
- 1077 RMQ问题再临-线段树
- 线段树水题 #1077 : RMQ问题再临-线段树
- hihoCoder 1070 RMQ问题再临
- [hihocoder 1070]RMQ问题再临
- RMQ问题再临 (线段树)
- hihocoder1077 RMQ问题再临-线段树
- HIHO #1077 : RMQ问题再临-线段树
- 线段树/RMQ问题
- hiho一下 第十九周 RMQ问题再临-线段树
- String 和StringBuffer,StringBuilder的区别
- 策略模式与状态模式
- 数据库_级联更新/级联删除_ON UPDATE CASCADE/ON DELETE CASCADE
- LeetCode--Binary Tree Traversal ( Inorder, Preorder, PostOrder)
- 编译预处理
- [HihoCoder]#1077 : RMQ问题再临-线段树
- 设计模式之装饰者模式
- Android初学之Handler
- 【Codeforces Round 362 (Div 2)D】【树的遍历 概率均分思想】Puzzles 兄弟节点的等概率遍历下 树的遍历每点期望时间戳
- 收集的博客和文章
- 英语 语法检查网站 小记
- CentOS里route命令详解
- 如何掌握Facebook自动人脸识别技术?
- android—DatePicker 和TimePicker显示日期以及使用TimePickerDialog,DatePickerDialog来专门实现时间选择对话框