Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define INF 2139062143
  5. #define LINF 9187201950435737471
  6. #define mem(a,v) memset(a,v,sizeof(a))
  7. #define maxn 100010
  8. #define rep(i, a, b) for (int i = (a); i <= (b); ++i)
  9. #define red(i, a, b) for (int i = (a); i >= (b); --i)
  10. #define pb push_back
  11. #define eps 1e-6
  12. #define ll long long
  13. #define max(a,b) (a>b?a:b)
  14. #define min(a,b) (a<b?a:b)
  15. typedef pair<int, int> pp;
  16.  
  17. int n,k,T;
  18. int a[maxn];
  19. int b[maxn];
  20. map<int,int> num;
  21. int pre[maxn];
  22. inline int findx(int u){
  23. return lower_bound(b+1,b+1+b[0],u) - b;
  24. }
  25. int main() {
  26. // ios::sync_with_stdio(false);cout.setf(ios::fixed);cout.precision(6);
  27. #ifdef LOCAL
  28. freopen("/Users/huangqingwei/Documents/clionworkspace/hqw/input.txt", "r", stdin);
  29. // freopen("/Users/huangqingwei/Documents/clionworkspace/hqw/output.txt", "w", stdout);
  30. #endif
  31. while(~scanf("%d%d%d",&n,&k,&T))
  32. {
  33. num.clear();
  34. mem(pre,0);
  35. rep(i,1,n)
  36. scanf("%d",a+i);
  37. rep(i,1,n)
  38. b[i] = a[i];
  39. sort(b+1,b+1+n);
  40. b[0] = unique(b+1,b+1+n) - b - 1;
  41. rep(i,1,n)
  42. num[findx(a[i])]++;
  43. red(i,b[0],1)
  44. pre[i] = pre[i+1] + num[i];
  45. int l = 1, r = b[0], mid;
  46. while(l<r)
  47. {
  48. mid = l + ((r-l+1)>>1);
  49. if(pre[mid]>=k)
  50. l = mid;
  51. else
  52. r = mid - 1;
  53. }
  54. if(pre[l]>k)
  55. {
  56. if(T==0)
  57. {
  58. puts("-1");
  59. }
  60. else if(b[l]==0)
  61. {
  62. printf("%d\n",k-pre[l+1]);
  63. }
  64. else if(b[l]==T)
  65. {
  66. printf("%d\n",pre[l]-k);
  67. }
  68. else
  69. {
  70. printf("%d\n",min(k-pre[l+1],pre[l]-k));
  71. }
  72. }
  73. else if(pre[l]==k)
  74. {
  75. puts("0");
  76. }
  77. else
  78. {
  79. puts("-1");
  80. }
  81. }
  82.  
  83.  
  84.  
  85. #ifdef LOCAL
  86. cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  87. #endif
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement