1. 程式人生 > 其它 >CF977C Less or Equal 題解

CF977C Less or Equal 題解

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;
}