给定一个序列,每次询问序列中第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;
}


猜你喜欢

转载自blog.csdn.net/qq_36570464/article/details/60343884