Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. #define mini(x, y) x < y ? x : y
  6.  
  7. using namespace std;
  8.  
  9. long long n, x[100000 + 10], y[100000 + 10];
  10. int el[100000 + 10];
  11.  
  12. void res() {
  13.     for(int i = 1; i <= n; i++) {
  14.         el[i] = 0;
  15.     }
  16. }
  17.  
  18. void res1() {
  19.     for(int i = 1; i <= n; i++) {
  20.         if(el[i] == 2) {
  21.             el[i] = 0;
  22.         }
  23.     }
  24. }
  25.  
  26. void read() {
  27.     for(int i = 1; i <= n; i++) {
  28.         cin >> x[i] >> y[i];
  29.     }
  30. }
  31.  
  32. void eli(long long x1, long long x2, long long y1, long long y2) {
  33.     for(int i = 1; i <= n; i++) {
  34.         if(x[i] >= x1 && x[i] <= x2 && y[i] >= y1 && y[i] <= y2) {
  35.             el[i] = 1;
  36.         }
  37.     }
  38. }
  39.  
  40. void eli1(long long x1, long long x2, long long y1, long long y2) {
  41.     for(int i = 1; i <= n; i++) {
  42.         if(x[i] >= x1 && x[i] <= x2 && y[i] >= y1 && y[i] <= y2) {
  43.             el[i] = 2;
  44.         }
  45.     }
  46. }
  47.  
  48.  
  49. bool ver1(long long lu) {
  50.     long long co = 0;
  51.     long long maxx = 0, maxy = 0, minx = (1LL << 40), miny = (1LL << 40);
  52.     for(int i = 1; i <= n; i++) {
  53.         if(el[i] == 0) {
  54.             co++;
  55.             maxx = max(maxx, x[i]);
  56.             maxy = max(maxy, y[i]);
  57.             minx = mini(minx, x[i]);
  58.             miny = mini(miny, y[i]);
  59.         }
  60.     }
  61.     if(co == 0) {
  62.         return true;
  63.     }
  64.     if(maxx - minx <= lu && maxy - miny <= lu) {
  65.         return true;
  66.     }
  67.     return false;
  68. }
  69.  
  70. bool ver2(int lu) {
  71.     int co = 0;
  72.     long long maxx = 0, maxy = 0, minx = (1LL << 40), miny = (1LL << 40);
  73.     for(int i = 1; i <= n; i++) {
  74.         if(el[i] == 0) {
  75.             co++;
  76.             maxx = max(maxx, x[i]);
  77.             maxy = max(maxy, y[i]);
  78.             minx = mini(minx, x[i]);
  79.             miny = mini(miny, y[i]);
  80.         }
  81.     }
  82.     if(co == 0) {
  83.         return true;
  84.     }
  85.     eli1(minx, minx + lu, miny, miny + lu);
  86.     if(ver1(lu)) {
  87.         return true;
  88.     }
  89.     res1();
  90.     eli1(minx, minx + lu, maxy - lu, maxy);
  91.     if(ver1(lu)) {
  92.         return true;
  93.     }
  94.     res1();
  95.     eli1(maxx - lu, maxx, miny, miny + lu);
  96.     if(ver1(lu)) {
  97.         return true;
  98.     }
  99.     res1();
  100.     eli1(maxx - lu, maxx, maxy - lu, maxy);
  101.     if(ver1(lu)) {
  102.         return true;
  103.     }
  104.     return false;
  105. }
  106.  
  107. bool ver3(long long lu) {
  108.     int co = 0;
  109.     res();
  110.     long long maxx = 0, maxy = 0, minx = (1LL << 40), miny = (1LL << 40);
  111.     for(int i = 1; i <= n; i++) {
  112.         if(el[i] == 0) {
  113.             co++;
  114.             maxx = max(maxx, x[i]);
  115.             maxy = max(maxy, y[i]);
  116.             minx = mini(minx, x[i]);
  117.             miny = mini(miny, y[i]);
  118.         }
  119.     }
  120.     if(co == 0) {
  121.         return true;
  122.     }
  123.     eli(minx, minx + lu, miny, miny + lu);
  124.     if(ver2(lu)) {
  125.         return true;
  126.     }
  127.     res();
  128.     eli(minx, minx + lu, maxy - lu, maxy);
  129.     if(ver2(lu)) {
  130.         return true;
  131.     }
  132.     res();
  133.     eli(maxx - lu, maxx, miny, miny + lu);
  134.     if(ver2(lu)) {
  135.         return true;
  136.     }
  137.     res();
  138.     eli(maxx - lu, maxx, maxy - lu, maxy);
  139.     if(ver2(lu)) {
  140.         return true;
  141.     }
  142.     return false;
  143. }
  144.  
  145. int searc() {
  146.     long long st = 0, dr = (long long)1e9 + 1;
  147.     while(st < dr) {
  148.         long long mid = (st + dr) / 2;
  149.         if(ver3(mid)) {
  150.             dr = mid;
  151.         } else {
  152.             st = mid + 1;
  153.         }
  154.     }
  155.     return st;
  156. }
  157.  
  158.  
  159. int main()
  160. {
  161.     while(cin >> n) {
  162.         read();
  163.         cout << searc() << '\n';
  164.     }
  165.     return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement