CF977C Less or Equal 題解
阿新 • • 發佈:2021-12-21
CF977C Less or Equal 題解
的值分類討論:
Content
給定一個 \(n\) 個數的數列 \(a_1,a_2,a_3,...,a_n\) 和一個數 \(k\),試找出這樣的一個數 \(x\),使得數列中有 \(k\) 個數小於等於 \(x\)。求出任意一個 \(x\),或者 \(x\) 不存在。
資料範圍:\(1\leqslant n\leqslant 2\times 10^5,0\leqslant k\leqslant n,1\leqslant a_i\leqslant 10^9,x\in[1,10^9]\)。
Solution
比大小的話肯定要排序,所以我們先對這個序列排序。設排序後的每個數下標是按照其排序之後的位置決定的。然後,按照 \(k\)
- \(k=0\),那麼看最小的數 \(a_1\) 是否大於 \(1\),是的話 \(x=a_1-1\),否則不存在這樣的 \(x\)。
- \(k>0\),那麼直接看是否有 \(a_k=a_{k+1}\),有的話 \(x\) 不存在,否則 \(x=a_k\)。
Code
int n, k, a[200007], ans; int main() { getint(n), getint(k); _for(i, 1, n) getint(a[i]); sort(a + 1, a + n + 1); ans = (!k ? (a[1] > 1 ? a[1] - 1 : -1) : (a[k] == a[k + 1] ? -1 : a[k])); writeint(ans); return 0; }