Pagini recente » Cod sursa (job #537652) | Cod sursa (job #2676407) | Cod sursa (job #2346101) | Cod sursa (job #2331582) | Cod sursa (job #2668181)
#include <bits/stdc++.h>
using namespace std;
#define NMax 3000000
int n, k, x, max_num = INT_MIN, aib[NMax + 1];
void update(int pos);
int query(int pos);
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; ++i) {
cin >> x;
max_num = max(max_num, x);
update(x);
}
int left = 0, right = max_num, middle = 1, result = 1;
while(left <= right) {
middle = (left + right) >> 1;
if(query(middle) >= k) result = middle, right = middle - 1;
else left = middle + 1;
}
cout << result;
return 0;
}
void update(int pos) {
for(int i = pos; i <= NMax; i += i & -i) ++aib[i];
}
int query(int pos) {
int sum = 0;
for(int i = pos; i; i -= i & -i) {
sum += aib[i];
if(sum > k) return sum;
}
return sum;
}