题目链接:http://poj.org/problem?id=2104
时间限制20s,可以用暴力,先排序,对于每一次询问就扫一遍所有的元素,遇到下标在询问区间的计数器+1,直到计数器等于k。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node
{
int date;
int index;
};
node a[100010];
int cmp(const node& a, const node& b)
{
return a.date < b.date;
}
int main()
{
int n, m;
scanf("%d%d",&n,&m);
for (int i=0; i<n; i++)
{
scanf("%d",&a[i].date);
a[i].index = i + 1;
}
sort(a,a+n,cmp);
for (int i=0; i<m; i++)
{
int L, R, k;
scanf("%d%d%d",&L,&R,&k);
int cnt = 0;
int j;
for (j=0; j<=n; j++)
{
if (a[j].index >= L && a[j].index <= R)
cnt++;
if (cnt == k)
break;
}
printf("%d\n",a[j].date);
}
return 0;
}