题目1544:数字序列区间最小值
2013-10-07 09:36
302 查看
题目1544:数字序列区间最小值
时间限制:1 秒
内存限制:128 兆
特殊判题:否
题目描述:
给定一个数字序列,查询任意给定区间内数字的最小值。
输入:
输入包含多组测试用例,每组测试用例的开头为一个整数n(1<=n<=100000),代表数字序列的长度。
接下去一行给出n个数字,代表数字序列。数字在int范围内。
下一行为一个整数t(1<=t<=10000),代表查询的次数。
最后t行,每行给出一个查询,由两个整数表示l、r(1<=l<=r<=n)。
输出:
对于每个查询,输出区间[l,r]内的最小值。
样例输入:
样例输出:
时间限制:1 秒
内存限制:128 兆
特殊判题:否
题目描述:
给定一个数字序列,查询任意给定区间内数字的最小值。
输入:
输入包含多组测试用例,每组测试用例的开头为一个整数n(1<=n<=100000),代表数字序列的长度。
接下去一行给出n个数字,代表数字序列。数字在int范围内。
下一行为一个整数t(1<=t<=10000),代表查询的次数。
最后t行,每行给出一个查询,由两个整数表示l、r(1<=l<=r<=n)。
输出:
对于每个查询,输出区间[l,r]内的最小值。
样例输入:
5 3 2 1 4 3 3 1 3 2 4 4 5
样例输出:
1 1 3 区间最值,线段树入门最基本的试题。
#include <iostream> #include <stdio.h> #include <queue> #include <stdio.h> #include <string.h> #include <vector> #include <queue> #include <set> #include <algorithm> #include <map> #include <math.h> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std ; typedef long long LL ; const int N_size=100008 ; int N ,M ; struct Seg{ int left ; int right ; int min_num ; }seg[N_size*3]; //二叉树性质,注意这个地方 int num[N_size] ; void make_tree(int L ,int R ,int id){ seg[id].left=L ; seg[id].right=R ; if(L==R){ seg[id].min_num=num[L] ; return ; } int mid=(L+R)>>1 ; make_tree(L,mid,id*2) ; make_tree(mid+1,R,id*2+1) ; seg[id].min_num=Min(seg[id*2].min_num,seg[id*2+1].min_num) ; } int query(int L ,int R ,int id){ if(L<=seg[id].left&&seg[id].right<=R) return seg[id].min_num ; int mid=(seg[id].left+seg[id].right)>>1 ; if(R<=mid) return query(L,R,id*2) ; else if(mid<L) return query(L,R,id*2+1) ; else return Min(query(L,mid,id*2),query(mid+1,R,id*2+1)) ; } int main(){ int L ,R ; while(scanf("%d",&N)!=EOF){ for(int i=1;i<=N;i++) scanf("%d",&num[i]) ; make_tree(1,N,1) ; scanf("%d",&M) ; while(M--){ scanf("%d%d",&L,&R) ; if(L>R) swap(L,R) ; printf("%d\n",query(L,R,1)) ; } } return 0 ; }
相关文章推荐
- 九度oj 题目1544:数字序列区间最小值
- 题目1544:数字序列区间最小值
- [Jobdu] 题目1544:数字序列区间最小值
- 九度OJ 1544 数字序列区间最小值
- 九度OJ 1544 数字序列区间最小值
- 九度 1544 数字序列区间最小值
- 题目1544:数字序列区间最小值
- 九度Oj 1544 数字序列区间最小值
- 九度OJ 1544 数字序列区间最小值
- 九度 1544 数字序列区间最小值(朴素线段树)
- 九度数字序列区间最小值
- Find Min In Rotated Sorted Array2,包含重复数字的反转序列找最小值。
- bzoj1049 [HAOI2006]数字序列 ( LIS + 区间DP)
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,
- 算法题目---和为s的两个数字vs和为s的连续正数序列
- TyvjOJ 题目P1039 忠诚2(线段树单点跟新,区间最小值)
- 题目2 : 回文字符序列(区间DP)
- 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
- POJ 题目3580 SuperMemo(Splay Tree区间加,区间翻转,区间右移,插入删除,区间最小值)
- hihoCoder 1149 回文字符序列 (区间dp)