比赛 |
20120718 |
评测结果 |
AAAAATTTTT |
题目名称 |
找第k小的数 |
最终得分 |
50 |
用户昵称 |
Citron酱 |
运行时间 |
5.216 s |
代码语言 |
C++ |
内存使用 |
1.05 MiB |
提交时间 |
2012-07-18 12:01:34 |
显示代码纯文本
#include <cstdlib>
#include <cstdio>
#define I_F "kth.in"
#define O_F "kth.out"
const long MAXn=100000;
long s[MAXn], t[MAXn];
long n,m;
void Input();
void Strcpy(const long&, const long&);
inline void Swap(long&, long&);
void Qsort(const long&, const long&);
int main()
{
freopen(I_F,"r",stdin);
Input();
long l, r, k;
freopen(O_F,"w",stdout);
for (long i=0; i<m; ++i)
{
scanf("%ld%ld%ld",&l,&r,&k);
Strcpy(l-1,r-1);
Qsort(0,r-l);
printf("%ld\n",t[k-1]);
}
return 0;
}
void Input()
{
scanf("%ld%ld",&n,&m);
for (long i=0; i<n; ++i)
scanf("%ld",&s[i]);
}
void Strcpy(const long &l, const long &r)
{
for (int i=0; i<=r-l; ++i)
t[i]=s[l+i];
}
inline void Swap(long &a, long &b)
{
long t=a;
a=b;
b=t;
}
void Qsort(const long &l, const long &r)
{
if (r-l>20)
{
long x=t[l+rand()%(r-l+1)];
long i=l, j=r;
do
{
while (t[i]<x) ++i;
while (t[j]>x) --j;
if (i<=j)
Swap(t[i++],t[j--]);
} while (i<j);
if (i<r) Qsort(i,r);
if (l<j) Qsort(l,j);
}
else
{
bool flag=true;
for (long i=l; i<r && flag; ++i)
{
flag=false;
for (long j=r; j>i; --j)
if (t[j]<t[j-1])
Swap(t[j],t[j-1]),
flag=true;
}
}
}