1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <cstdio> #include <algorithm> using namespace std;
const int N = 1e5 + 10; int vals[N];
int quick_select(int l, int r, int k) { if(l == r) return vals[l]; int i = l - 1, j = r + 1, mid = vals[i + j >> 1]; while(i < j) { do ++i; while(vals[i] < mid); do --j; while(vals[j] > mid); if(i < j) swap(vals[i], vals[j]); } int len = j - l + 1; if(len >= k) return quick_select(l, j, k); return quick_select(j + 1, r, k - len); }
int main() { int n, k; scanf("%d%d", &n, &k); for(int i = 1; i <= n; ++i) scanf("%d", &vals[i]); printf("%d", quick_select(1, n, k)); return 0; }
|