Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define INF 2139062143
- #define LINF 9187201950435737471
- #define mem(a,v) memset(a,v,sizeof(a))
- #define maxn 100010
- #define rep(i, a, b) for (int i = (a); i <= (b); ++i)
- #define red(i, a, b) for (int i = (a); i >= (b); --i)
- #define pb push_back
- #define eps 1e-6
- #define ll long long
- #define max(a,b) (a>b?a:b)
- #define min(a,b) (a<b?a:b)
- typedef pair<int, int> pp;
- int n,k,T;
- int a[maxn];
- int b[maxn];
- map<int,int> num;
- int pre[maxn];
- inline int findx(int u){
- return lower_bound(b+1,b+1+b[0],u) - b;
- }
- int main() {
- // ios::sync_with_stdio(false);cout.setf(ios::fixed);cout.precision(6);
- #ifdef LOCAL
- freopen("/Users/huangqingwei/Documents/clionworkspace/hqw/input.txt", "r", stdin);
- // freopen("/Users/huangqingwei/Documents/clionworkspace/hqw/output.txt", "w", stdout);
- #endif
- while(~scanf("%d%d%d",&n,&k,&T))
- {
- num.clear();
- mem(pre,0);
- rep(i,1,n)
- scanf("%d",a+i);
- rep(i,1,n)
- b[i] = a[i];
- sort(b+1,b+1+n);
- b[0] = unique(b+1,b+1+n) - b - 1;
- rep(i,1,n)
- num[findx(a[i])]++;
- red(i,b[0],1)
- pre[i] = pre[i+1] + num[i];
- int l = 1, r = b[0], mid;
- while(l<r)
- {
- mid = l + ((r-l+1)>>1);
- if(pre[mid]>=k)
- l = mid;
- else
- r = mid - 1;
- }
- if(pre[l]>k)
- {
- if(T==0)
- {
- puts("-1");
- }
- else if(b[l]==0)
- {
- printf("%d\n",k-pre[l+1]);
- }
- else if(b[l]==T)
- {
- printf("%d\n",pre[l]-k);
- }
- else
- {
- printf("%d\n",min(k-pre[l+1],pre[l]-k));
- }
- }
- else if(pre[l]==k)
- {
- puts("0");
- }
- else
- {
- puts("-1");
- }
- }
- #ifdef LOCAL
- cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement