File tree 1 file changed +45
-0
lines changed
1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+ int maxSortedAdjacentDiff (int * arr, int n)
4
+ {
5
+ int maxVal = arr[0 ], minVal = arr[0 ];
6
+ for (int i = 1 ; i < n; i++) {
7
+ maxVal = max (maxVal, arr[i]);
8
+ minVal = min (minVal, arr[i]);
9
+ }
10
+ int maxBucket[n - 1 ];
11
+ int minBucket[n - 1 ];
12
+ fill_n (maxBucket, n - 1 , INT_MIN);
13
+ fill_n (minBucket, n - 1 , INT_MAX);
14
+ float delta = (float )(maxVal - minVal) / (float )(n - 1 );
15
+ for (int i = 0 ; i < n; i++) {
16
+ if (arr[i] == maxVal || arr[i] == minVal)
17
+ continue ;
18
+ int index = (float )(floor (arr[i] - minVal) / delta);
19
+ maxBucket[index ] = max (maxBucket[index ], arr[i]);
20
+ minBucket[index ] = min (minBucket[index ], arr[i]);
21
+ }
22
+ int prev_val = minVal;
23
+ int max_gap = 0 ;
24
+ for (int i = 0 ; i < n - 1 ; i++) {
25
+ if (minBucket[i] == INT_MAX)
26
+ continue ;
27
+ max_gap = max (max_gap, minBucket[i] - prev_val);
28
+ prev_val = maxBucket[i];
29
+ }
30
+ max_gap = max (max_gap, maxVal - prev_val);
31
+
32
+ return max_gap;
33
+ }
34
+ int main ()
35
+ {
36
+ int n;
37
+ cin>>n;
38
+ int arr[n];
39
+ for (int i=0 ;i<n;i++)
40
+ {
41
+ cin>>arr[i];
42
+ }
43
+ cout << maxSortedAdjacentDiff (arr, n) << endl;
44
+ return 0 ;
45
+ }
You can’t perform that action at this time.
0 commit comments