题目描述
loidc准备带着LOI的队员们考完试后到海边玩耍。所以他想写一个程序让队员们了解在一段时间内海浪的情况。他的命令是这样的x y k输入的,这是要询问在时间[x,y]内海浪高度第k小的单位时刻是那个时刻。
但是在他刚准备打开Dev-pas++ 的时候,loidc发现他的电脑坏掉了。于是一向喜欢偷懒的他就向你求助。他希望你能在1S内完成程序的运行。
当然loidc会提前告诉你所有时段海浪的高度,这点你放心。至于他是如何得到的,这就不得而知了。
输入输出格式
输入格式:
第一行一个数n,表示总时间段。
第二行n个数,一次表示1~n单位时刻海浪的高度。(数据保证各个时刻海浪高度均不相同)
第三行一个数m,表示有m个询问。
接下来m行,每行3个数x y k,表示一个询问。(数据保证k<=y-x+1)
输出格式:
一共m行,是每个询问的回答。
思路
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n,x,k,i,y,m,j,t,a[4001],d[4001];
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
d[i]=i;
}
for(i=1;i<=n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
{
swap(a[i],a[k]);
swap(d[i],d[k]);
}
}
scanf("%d",&m);
for(j=1;j<=m;j++)
{
scanf("%d%d%d",&x,&y,&k);
int t=0;
for(i=1;i<=n;i++)
{
if(x<=d[i]&&d[i]<=y)
{
t++;
}
if(t==k)
{
printf("%d\n",d[i]);
break;
}
}
}
return 0;
}