Advertisement
Guest User

Untitled

a guest
Apr 5th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define fi first
  4. #define se second
  5.  
  6. const int N = 200200;
  7.  
  8. using namespace std;
  9.  
  10. int n;
  11. int id[N];
  12. int t[N];
  13. pair < int, int > a[N];
  14. vector < pair < int, int > > v;
  15.  
  16. void upd(int x, int g)
  17. {
  18.         while(x < N){
  19.                 t[x] += g;
  20.                 x += x & -x;
  21.         }
  22. }
  23.  
  24. int get_c(int x)
  25. {
  26.         int res = 0;
  27.         while(x > 0){
  28.                 res += t[x];
  29.                 x -= x & -x;
  30.         }
  31.         return res;
  32. }
  33.  
  34. long long get(int D)
  35. {
  36.         long long res = 0;
  37.         for(int i = 0; i < N; i++) t[i] = 0;
  38.  
  39.         for(int i = 1, j = 1; i <= n; i++){
  40.                 if(i > 1){
  41.                         upd(id[i - 1], 1);
  42.                 }
  43.                 while(j < i && a[i].fi - a[j].fi > D){
  44.                         upd(id[j], -1);
  45.                         j += 1;
  46.                 }
  47.                 int l = lower_bound(v.begin(), v.end(), make_pair(a[i].se - D, 0)) - v.begin();
  48.                 int r = lower_bound(v.begin(), v.end(), make_pair(a[i].se + D + 1, 0)) - v.begin() - 1;
  49.                 if(l <= r){
  50.                         res += get_c(v[r].se) - get_c(v[l].se - 1);
  51.                 }
  52.         }
  53.         return res;
  54. }
  55.  
  56. int main()
  57. {
  58.         ios_base::sync_with_stdio(0);
  59.  
  60.         //freopen("input.txt", "r", stdin);
  61.         //freopen("output.txt", "w", stdout);
  62.  
  63.         long long k;
  64.         cin >> n >> k;
  65.         for(int i = 1; i <= n; i++){
  66.                 int x, y;
  67.                 cin >> x >> y;
  68.  
  69.                 a[i] = {x + y, x - y};
  70.         }
  71.         sort(a + 1, a + n + 1);
  72.  
  73.         v.push_back({-2e9, 0});
  74.         v.push_back({2e9, 0});
  75.  
  76.         for(int i = 1; i <= n; i++){
  77.                 v.push_back({a[i].se, i});
  78.         }
  79.         sort(v.begin(), v.end());
  80.         for(int i = 0, j = 0; i < v.size(); i++){
  81.                 if(i > 0 && v[i].fi > v[i - 1].fi){
  82.                         j += 1;
  83.                 }
  84.                 id[v[i].se] = j;
  85.                 v[i].se = j;
  86.         }
  87.  
  88.         int l = 1, r = 5e8;
  89.         while(l < r){
  90.                 int m = (l + r) / 2;
  91.                 if(get(m) >= k){
  92.                         r = m;
  93.                 } else{
  94.                         l = m + 1;
  95.                 }
  96.         }
  97.  
  98.         cout << l << "\n";
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement