Hust oj 1189 区间最大值 II(线段树RMQ)
来源:互联网 发布:js中unicode编码 编辑:程序博客网 时间:2024/04/29 08:56
区间最大值 II
Time Limit: 1000 MS Memory Limit: 65535 K
Total Submit: 481(158 users) Total Accepted: 172(112 users) Rating: Special Judge: No
Description
给一个有n个整数的序列a1, a2, a3, ..., an,然后有q个提问,每个提问为两个整数i、j,(i<=j),请你回答,在ai到aj中,最大值是多少。
注意:1 <= n,q <= 100000, ai在int整型表示的范围内。
Input
有多组测试数据。
每组测试数据的第一行为一个整数n,表示有n个数;
第二行为n个整数,表示a1,a2,..an;
第三行为q,表示q个提问。
接下来有q行,每行两个数i, j, (i <= j)。
Output
每组测试数据先输出一行"Case n:", n从1开始计数;
接下来有q行,每行对应一个提问,每行只有一个整数,为ai到aj间的最大值。
Sample Input
3
1 3 2
2
1 2
2 3
4
1 2 3 4
3
1 2
2 4
1 1
Sample Output
Case 1:
3
3
Case 2:
2
4
1
Hint
Time Limit: 1000 MS Memory Limit: 65535 K
Total Submit: 481(158 users) Total Accepted: 172(112 users) Rating: Special Judge: No
Description
给一个有n个整数的序列a1, a2, a3, ..., an,然后有q个提问,每个提问为两个整数i、j,(i<=j),请你回答,在ai到aj中,最大值是多少。
注意:1 <= n,q <= 100000, ai在int整型表示的范围内。
Input
有多组测试数据。
每组测试数据的第一行为一个整数n,表示有n个数;
第二行为n个整数,表示a1,a2,..an;
第三行为q,表示q个提问。
接下来有q行,每行两个数i, j, (i <= j)。
Output
每组测试数据先输出一行"Case n:", n从1开始计数;
接下来有q行,每行对应一个提问,每行只有一个整数,为ai到aj间的最大值。
Sample Input
3
1 3 2
2
1 2
2 3
4
1 2 3 4
3
1 2
2 4
1 1
Sample Output
Case 1:
3
3
Case 2:
2
4
1
Hint
题目数据已更新。
很直接的一个RMQ问题,手敲线段树直接AC,用cin和cout超时了一发,再用剁手QAQ
#include<cstdio>using namespace std;int const Maxsize = 200000;int val[Maxsize + 1];struct node{ int max; int left; int right;}tree[Maxsize*2];int Max(int x,int y){ return x>y?x:y;}int create(int root,int left,int right){ int a,b; tree[root].left = left; tree[root].right = right; if(left == right) return tree[root].max = val[left]; int middle = (right+left)/2; a = create(2*root, left, middle); b = create(2*root+1, middle+1, right); return tree[root].max = Max(a,b);}int update(int root, int pos,int val){ int a,b; if(pos < tree[root].left || tree[root].right < pos) return tree[root].max; if(tree[root].left == pos && tree[root].right == pos) return tree[root].max = val; a = update(2*root, pos, val); b = update(2*root+1, pos, val); return tree[root].max = Max(a,b);}int RMQ(int root, int left, int right){ if(tree[root].left>right || tree[root].right<left) return 0; if(left <=tree[root].left && tree[root].right <= right)\ return tree[root].max; int a,b; a = RMQ(2*root, left, right); b = RMQ(2*root+1,left, right); return Max(a,b);}int main(){ int n,m; int right,left; int cnt = 1; while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) { scanf("%d",&val[i]); } create(1,1,n); printf("Case %d:\n",cnt++); scanf("%d",&m); for(int i = 0; i < m;i++) { scanf("%d%d",&left,&right); printf("%d\n",RMQ(1,left,right)); } }}
0 0
- Hust oj 1189 区间最大值 II(线段树RMQ)
- 哈理工OJ 1189 区间最大值 II(线段树【简单】)
- Hust oj 2043 长长长长龙(线段树RMQ)
- HRBUST 1189 区间最大值 II (线段树)
- RMQ(区间最大值)
- 线段树求区间最大值RMQ(单点更新)
- RMQ区间最值(线段树)
- hrbust oj 1189、线段树初探 简单应用之区间最大值、
- hdu1754-线段树(求区间最大值)
- HDU 1754 区间最大值 (线段树)
- Billboard(线段树区间最大值)
- Hust oj 1559 线段相交(叉积)
- 线段树求区间最大值
- 线段树区间求最大值
- 线段树区间和最大值
- 线段树求区间最大值
- poj3264线段树---区间最大最小值查询(RMQ)
- poj2823------线段树-------求区间最大最小值(RMQ)
- 密码发生器
- 文件的打开
- 通过进程ID获取进程名
- baseAdapter自定义适配器千万注意
- HDU_2102_ A计划
- Hust oj 1189 区间最大值 II(线段树RMQ)
- Android SDK] Error when loading the SDK:
- Ubuntu下安装YaH3C
- Session与cookie
- 骨骼算法,仿生中的外观
- Poj 2718 Smallest Difference【dfs】
- View Programming Guide for iOS 学习笔记_3
- 【bzoj2055】80人环游世界 有源汇上下界费用流
- A、B、C、D和E类IP地址