提交时间:2025-09-24 17:05:37

运行 ID: 67673

#include <iostream> #include <vector> #include <algorithm> #include <random> using namespace std; int quickSelect(vector<int>& nums, int k) { random_device rd; mt19937 gen(rd()); function<int(int, int)> select = [&](int l, int r) { if (l == r) return nums[l]; int pivotIndex = uniform_int_distribution<int>(l, r)(gen); swap(nums[pivotIndex], nums[l]); int pivot = nums[l]; int i = l, j = r + 1; while (true) { do i++; while (i <= r && nums[i] > pivot); do j--; while (j >= l && nums[j] < pivot); if (i >= j) break; swap(nums[i], nums[j]); } swap(nums[l], nums[j]); if (k <= j) return select(l, j); return select(j + 1, r); }; return select(0, nums.size() - 1); } int main() { int n, k; cin >> n >> k; vector<int> nums(n); for (int &x : nums) cin >> x; cout << quickSelect(nums, k - 1); // 注意k是1-based return 0; }