(由于是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;
}