fork download
  1. #include <stdio.h>
  2.  
  3. using namespace std;
  4. /// POTRZEBNE FUNKCJE
  5. long long int minimum(long long int a, long long int b);
  6. long long int maximum(long long int a, long long int b);
  7. long long int absval(long long int a);
  8. void quick_sort(long long int tab[], long long int tab2[], int lewy, int prawy);
  9. /// POTRZEBNE ZMIENNE
  10. int n;
  11. long long int mx=50000000000000,my=50000000000000;
  12. long long int dist;
  13. int main()
  14. {
  15. scanf("%d", &n);
  16. long long int x[n],y[n];
  17. for(int i=0; i<n; i++)
  18. {
  19. scanf("%lld", &x[i]);
  20. scanf("%lld", &y[i]);
  21. x[i]=x[i]-y[i];
  22. y[i]=x[i]+2*y[i];
  23. }
  24. quick_sort(x,y,0,n-1);
  25. for(int i=0; i<n-1; i++)
  26. {
  27. int k=0;
  28. while(x[i]==x[i+1]&&i<n-1)
  29. {
  30. i++;
  31. k++;
  32. }
  33. quick_sort(y,x,i-k,i);
  34. }
  35.  
  36. for(int i=0; i<n-1; i++)
  37. {
  38. dist=maximum(absval(x[i]-x[i+1]),absval(y[i]-y[i+1]));
  39. if(dist<mx)
  40. {
  41. mx=dist;
  42. }
  43. }
  44. quick_sort(y,x,0,n-1);
  45. for(int i=0; i<n; i++)
  46. {
  47. int k=0;
  48. while(y[i]==y[i+1]&&i<n-1)
  49. {
  50. i++;
  51. k++;
  52. }
  53. quick_sort(x,y,i-k,i);
  54. }
  55. for(int i=0; i<n-1; i++)
  56. {
  57. dist=maximum(absval(x[i]-x[i+1]),absval(y[i]-y[i+1]));
  58. if(dist<my)
  59. {
  60. my=dist;
  61. }
  62. }
  63. dist=minimum(mx,my);
  64. printf("%lld",dist);
  65.  
  66. return 0;
  67. }
  68.  
  69. long long int minimum(long long int a, long long int b)
  70. {
  71. if(a<b)
  72. {
  73. return a;
  74. }
  75. else
  76. {
  77. return b;
  78. }
  79. }
  80.  
  81. long long int maximum(long long int a, long long int b)
  82. {
  83. if(a>b)
  84. {
  85. return a;
  86. }
  87. else
  88. {
  89. return b;
  90. }
  91. }
  92.  
  93. long long int absval(long long int a)
  94. {
  95. if(a<0)
  96. {
  97. return -a;
  98. }
  99. else
  100. {
  101. return a;
  102. }
  103. }
  104.  
  105. void quick_sort(long long int tab[], long long int tab2[], int lewy, int prawy) // sortowanie rosnace
  106. {
  107. if(prawy <= lewy)
  108. {
  109. return;
  110. }
  111. else
  112. {
  113. int i = lewy-1, j = prawy+1, pivot = tab[(lewy+prawy)/2];
  114.  
  115. while(1)
  116. {
  117. while(pivot>tab[++i]);
  118. while(pivot<tab[--j]);
  119. if( i <= j)
  120. {
  121. long long int p;
  122. p=tab[i];tab[i]=tab[j];tab[j]=p;
  123. p=tab2[i];tab2[i]=tab2[j];tab2[j]=p;
  124. }
  125. else
  126. {
  127. break;
  128. }
  129.  
  130. }
  131.  
  132. if(j > lewy)
  133. {
  134. quick_sort(tab,tab2, lewy, j);
  135. }
  136.  
  137. if(i < prawy)
  138. {
  139. quick_sort(tab,tab2, i, prawy);
  140. }
  141. }
  142. }
  143.  
Success #stdin #stdout 0s 3472KB
stdin
2
-1000000000 1000000000
1000000000 -1000000000
stdout
4000000000