Guest User

Untitled

a guest
Jun 25th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <climits>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. struct bucket {
  7. bool used;
  8. int min_val;
  9. int max_val;
  10. };
  11.  
  12. int main(int argc, char const *argv[])
  13. {
  14. int n;
  15. cin >> n;
  16. int arr[n];
  17. if(n < 2)
  18. {
  19. cout << 0 << endl;
  20. exit(0);
  21. }
  22. for (int i = 0; i < n; ++i)
  23. {
  24. cin >> arr[i] ;
  25. }
  26.  
  27. int mini = *std::min_element(arr, arr+n);
  28. int maxi = *std::max_element(arr, arr+n);
  29. //cout << "min " << mini << " max " << maxi << endl;
  30.  
  31.  
  32. //minimum gap needed between elements of a size n
  33. int bucketSize = max(1, ((maxi-mini)/(n-1)));
  34. //number of buckets needed
  35. int bucketNumber = (maxi - mini)/bucketSize + 1;
  36.  
  37. //cout << bucketSize << " " << bucketNumber << endl;
  38.  
  39. struct bucket b[bucketNumber];
  40. //initialise buckets
  41. for (int i = 0; i < bucketNumber; ++i)
  42. {
  43. b[i].used = false;
  44. b[i].min_val = INT_MAX;
  45. b[i].max_val = INT_MIN;
  46. }
  47.  
  48.  
  49. //place numbers in their appropriate buckets
  50. //the range of values in each bucket is such that
  51. //the maxDiff elements HAVE to be in different buckets
  52.  
  53. for (int i = 0; i < n; ++i)
  54. {
  55. int ind = (arr[i] - mini)/ bucketSize;
  56. cout << ind << endl;
  57. b[ind].used = true;
  58. b[ind].min_val = min(arr[i], b[ind].min_val);
  59. b[ind].max_val = max(arr[i], b[ind].max_val);
  60. }
  61.  
  62. int previousMax = mini, answer = 0;
  63.  
  64. for (int i = 0; i < bucketNumber; ++i)
  65. {
  66. if(!b[i].used)
  67. continue;
  68. //cout << previousMax << endl;
  69. //cout << b[i].min_val << " " << b[i].max_val << endl;
  70. answer = max(answer, b[i].min_val - previousMax);
  71. previousMax = b[i].max_val;
  72. }
  73. cout << answer << endl;
  74. return 0;
  75. }
Add Comment
Please, Sign In to add comment