@@ -10,49 +10,49 @@ static inline int max(int a, int b)
10
10
11
11
static int area_calc (int * heights , int size )
12
12
{
13
- int * indexes = malloc (size * sizeof (int ));
14
- int * lhist = malloc (size * sizeof (int ));
15
- int * rhist = malloc (size * sizeof (int ));
13
+ int * idx_stk = malloc (size * sizeof (int ));
14
+ int * lmax = malloc (size * sizeof (int ));
15
+ int * rmax = malloc (size * sizeof (int ));
16
16
17
17
int i , pos = 0 ;
18
18
for (i = 0 ; i < size ; i ++ ) {
19
- /* squeeze to keep monotonous increasing histograms */
20
- while (pos > 0 && heights [indexes [ pos - 1 ]] >= heights [ i ]) {
19
+ /* keep monotonous increasing maxograms */
20
+ while (pos > 0 && heights [i ] < heights [ idx_stk [ pos - 1 ]]) {
21
21
pos -- ;
22
22
}
23
- lhist [i ] = pos == 0 ? -1 : indexes [pos - 1 ];
24
- indexes [pos ++ ] = i ;
23
+ lmax [i ] = pos == 0 ? -1 : idx_stk [pos - 1 ];
24
+ idx_stk [pos ++ ] = i ;
25
25
}
26
26
27
27
pos = 0 ;
28
28
for (i = size - 1 ; i >= 0 ; i -- ) {
29
- /* squeeze to keep monotonous increasing histograms */
30
- while (pos > 0 && heights [indexes [ pos - 1 ]] >= heights [ i ]) {
29
+ /* keep monotonous increasing maxograms */
30
+ while (pos > 0 && heights [i ] < heights [ idx_stk [ pos - 1 ]]) {
31
31
pos -- ;
32
32
}
33
- rhist [i ] = pos == 0 ? size : indexes [pos - 1 ];
34
- indexes [pos ++ ] = i ;
33
+ rmax [i ] = pos == 0 ? size : idx_stk [pos - 1 ];
34
+ idx_stk [pos ++ ] = i ;
35
35
}
36
36
37
37
int max_area = 0 ;
38
38
for (i = 0 ; i < size ; i ++ ) {
39
- int area = heights [i ] * (rhist [i ] - lhist [i ] - 1 );
39
+ int area = heights [i ] * (rmax [i ] - lmax [i ] - 1 );
40
40
max_area = max (area , max_area );
41
41
}
42
42
43
43
return max_area ;
44
44
}
45
45
46
- static int maximalRectangle (char * * matrix , int matrixRowSize , int matrixColSize )
46
+ static int maximalRectangle (char * * matrix , int matrixSize , int * matrixColSize )
47
47
{
48
48
int i , j , max_area = 0 ;
49
- int * heights = malloc (matrixColSize * sizeof (int ));
50
- memset (heights , 0 , matrixColSize * sizeof (int ));
51
- for (i = 0 ; i < matrixRowSize ; i ++ ) {
52
- for (j = 0 ; j < matrixColSize ; j ++ ) {
49
+ int * heights = malloc (matrixColSize [ 0 ] * sizeof (int ));
50
+ memset (heights , 0 , matrixColSize [ 0 ] * sizeof (int ));
51
+ for (i = 0 ; i < matrixSize ; i ++ ) {
52
+ for (j = 0 ; j < matrixColSize [ i ] ; j ++ ) {
53
53
heights [j ] = matrix [i ][j ] == '1' ? heights [j ] + 1 : 0 ;
54
54
}
55
- max_area = max (max_area , area_calc (heights , matrixColSize ));
55
+ max_area = max (max_area , area_calc (heights , matrixColSize [ i ] ));
56
56
}
57
57
return max_area ;
58
58
}
@@ -68,9 +68,11 @@ int main(int argc, char **argv)
68
68
int i , j ;
69
69
int row_size = argc - 1 ;
70
70
int col_size = strlen (argv [1 ]);
71
+ int * cols = malloc (row_size * sizeof (int ));
71
72
for (i = 0 ; i < row_size ; i ++ ) {
73
+ cols [i ] = strlen (argv [1 ]);
72
74
printf ("%s\n" , argv [i + 1 ]);
73
75
}
74
- printf ("%d\n" , maximalRectangle (argv + 1 , argc - 1 , strlen ( argv [ 1 ]) ));
76
+ printf ("%d\n" , maximalRectangle (argv + 1 , argc - 1 , cols ));
75
77
return 0 ;
76
78
}
0 commit comments