#include<bits/stdc++.h>
using namespace std;
int a[106];
int parti(int A[],int l,int r) //基于快排的划分。
{
int now=l-1;
for(int i=l;i<r;i++)
{
if(A[i]<A[r])
{
int t;
t=A[now+1];
A[now+1]=A[i];
A[i]=t;
now++;
}
}
int t;
t=A[now+1];
A[now+1]=A[r];
A[r]=t;
return now+1;
}
int find_(int A[],int l,int r,int k) //找区间第k小的下标。 最坏情况下时间大于O(N)。
{
if(l>r)return 0;
int now=parti(A,l,r);
if(now-l+1==k)return now;
if(now-l<k)
{
find_(A,now+1,r,k-(now-l+1));
}
else
{
find_(A,l,now-1,k);
}
}
int main()
{
for(int i=1;i<=100;i++)a[i]=101-i;
//int pp=find_(a,1,100,6);
for(int k=2;k<=19;k++)cout<<find_(a,1,100,k)<<endl;
}
using namespace std;
int a[106];
int parti(int A[],int l,int r) //基于快排的划分。
{
int now=l-1;
for(int i=l;i<r;i++)
{
if(A[i]<A[r])
{
int t;
t=A[now+1];
A[now+1]=A[i];
A[i]=t;
now++;
}
}
int t;
t=A[now+1];
A[now+1]=A[r];
A[r]=t;
return now+1;
}
int find_(int A[],int l,int r,int k) //找区间第k小的下标。 最坏情况下时间大于O(N)。
{
if(l>r)return 0;
int now=parti(A,l,r);
if(now-l+1==k)return now;
if(now-l<k)
{
find_(A,now+1,r,k-(now-l+1));
}
else
{
find_(A,l,now-1,k);
}
}
int main()
{
for(int i=1;i<=100;i++)a[i]=101-i;
//int pp=find_(a,1,100,6);
for(int k=2;k<=19;k++)cout<<find_(a,1,100,k)<<endl;
}