给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个
(由于是ACM题所以是按其写的,其实我也是新手,如果有什么出错的地方还望理解和提出,我将继续努力)
题目描述
给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出
总共输出m行,每行一个数,表示询问的答案。
#include<iostream> using namespace std; int main() { int *p,n, m, l, r, k; int i, j, c, e = 0, u, max, a[1000]; p=new int[1000]; while (cin >> n) { for (i = 0; i < n; i++) cin >> p[i]; cin >> m; for (j = 0; j < m; j++) { cin >> l >> r >> k; for (i = l - 1; i < r; i++) a[e++] = p[i]; for (u = 1; u <= e - 1; u++) { for (c = 0; c <=e - u-1; c++) { if (a[c] < a[c + 1]) { int t = a[c]; a[c] = a[c + 1]; a[c + 1] = t; } } } max = a[k-1]; cout<<max<<endl; e = 0; } } delete[]p; return 0; }