水题—— 区间最大数

区间最大数

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 16  Solved: 4
[Submit][Status][Discuss]

Description

 

 给出一列数共N个,将其从1到N编号,进行M次查询[X, Y](X<=Y),给出第X个数到第Y个数间最大的数

 

Input

 

 一组测试数据,第一行输入N,M(1<=N, M<=10^5),第二行N个数;之后M行,每行分别为X,Y。给出一列数共N个,将其从1到N编号,进行M次查询[X, Y](X<=Y),给出第X个数到第Y个数间最大的数。

 

Output

 

 对于每个[X, Y]输出编号在X和Y之间(包括X,Y)的最大值。每行输出一个结果。

 

Sample Input

5 2
4 3 1 2 5
1 4
2 5

Sample Output

4
5


思路:4 3 1 2 5,对应的位置为(4,1)(3,2)(1,3)(2,4)(5,5) 将数字排序变为
(5,5)(4,1)(3,2)(2,4)(1,3) (要用快排) 然后查找xy区间即可。


下面贴代码:
View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 const int MN=100005;
 6 struct Node
 7 {
 8     int s;int cnt;
 9 }node[MN];
10 bool cmp(struct Node a,struct Node b)
11 {
12     return a.s>b.s;
13 }
14 int main()
15 {
16     int n,m,x,y;
17     scanf("%d%d",&n,&m);
18     for(int i=0;i<n;i++){
19         scanf("%d",&node[i].s);
20         node[i].cnt=i+1;
21     }
22     sort(node,node+n,cmp);
23     for(int i=0;i<m;i++){
24         scanf("%d%d",&x,&y);
25         for(int j=0;j<n;j++){
26             if(node[j].cnt>=x && node[j].cnt<=y){
27                 printf("%d\n",node[j].s);
28                 break;
29             }
30         }
31     }
32     return 0;
33 }

 



posted @ 2013-04-17 21:42  ZeroCode_1337  阅读(229)  评论(0编辑  收藏  举报