水题—— 区间最大数
区间最大数
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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 }
Do one thing , and do it well !