问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。 输入格式 第一行包含一个数n,表示序列长度。 第二行包含n个正整数,表示给定的序列。 第三个包含一个正整数m,表示询问个数。 接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。 输出格式 总共输出m行,每行一个数,表示询问的答案。 样例输入 5 1 2 3 4 5 2 1 5 2 2 3 2 样例输出 4 2 数据规模与约定 对于30%的数据,n,m<=100; 对于100%的数据,n,m<=1000; 保证k<=(r-l+1),序列中的数<=106。
源代码(暂定):
‘
1 #include <stdio.h> 2 #define N 1000 3 4 int arr[N] = {0}; 5 6 int max_sort(int l,int r,int k); 7 8 int main(void) 9 { 10 int i = 0 , j = 0 ; 11 int l = 0 , r = 0 , k = 0 ; 12 int n = 0 , m = 0 ; 13 int tmp[N][3] = {0}; 14 15 scanf("%d",&n); /*序列长度*/ 16 17 for (i = 0 ; i < n ; i ++) 18 { 19 scanf("%d",&arr[i]); /*给定的序列*/ 20 } 21 22 scanf("%d",&m); /*询问的个数*/ 23 for (i = 0 ; i < m ; i ++) 24 { 25 scanf("%d %d %d",&tmp[i][0],&tmp[i][1],&tmp[i][2]); 26 } 27 28 for (i = 0 ; i < m ; i ++) 29 { 30 printf("%d\n",max_sort(tmp[i][0],tmp[i][1],tmp[i][2])); 31 } 32 33 return 0; 34 } 35 36 /* 37 在第l个数~第r个数中,找出第k大的数 38 */ 39 int max_sort(int l,int r,int k) 40 { 41 int max = 0 ; 42 int tmp[N] = {0}; 43 int i = 0 , j = 0 ; 44 for (i = 0 ; i <= r-l ; i ++) 45 { 46 tmp[i] = arr[l-1+i]; 47 } 48 for (i = 0 ; i <= r-l ; i ++) 49 { 50 for (j = i + 1 ; j <= r-l ; j ++) 51 { 52 if (tmp[i] < tmp[j]) 53 { 54 tmp[i] = tmp[i] ^ tmp[j]; 55 tmp[j] = tmp[i] ^ tmp[j]; 56 tmp[i] = tmp[i] ^ tmp[j]; 57 } 58 } 59 } 60 61 return tmp[k-1]; 62 }