注意到\(\geq A\)的数最多只能取一个,所以分取不取讨论。
二分出第一个\(\geq A\)的数\(x\),设位置为\(t\)
如果取,询问第一小到第\(k-1\)小的数,设他们的和为\(s\)。
如果\(x+s\ge 2A\)显然不可行,否则可行。
如果不取,则考虑询问第\(k\)小的数,小于\(A\)的倒数\(k\)个数。
如果前\(k\)小的数和\(\ge 2A\)或者小于\(A\)的倒数\(k\)个数的和\(\le A\)显然没有解,否则有解。
考虑一个集合\(S\),首先\(S\)包含前\(k\)小的数。
维护一个指针\(p\)表示小于\(k\)的第\(p\)大的数。
首先\(p=t-k+1\),然后每次把\(S\)最小的数删掉,加入第\(p\)个数,然后\(p++\)。
容易发现每次我们\(S\)的和加的肯定\(\ge A\),所以如果现在\(S\)的和为\(t<A\),则进行一次操作后,\(t<2A\)
所以在这个过程中,\(S\)肯定会有一个时候合法。
询问次数\(2K+\log_2n\)