class Solution {
  public:
    int go(int fi, int end, vector<int>& p, int k) {
        if (fi == end)return fi;
        int zd = p[rand()%(end-fi+1)+fi], l = fi, r = end;
        while (l < r) {
            while (p[l] > zd && l < r)l++;
            while (p[r] < zd && l < r)r--;
            swap(p[l], p[r]);
            l++;
        }
        if (r - fi >= k)return go(fi, r - 1, p, k);
        return go(r, end, p, k-r+fi);
    }
    int findKth(vector<int> a, int n, int K) {
        return (a[go(0, n - 1, a, K)]);
    }
};