blob: e91014c69a4e4c958f40955809ee67f1b222b1cf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#include <vector>
#include <iostream>
#include <algorithm>
std::vector<std::vector<int>> createGroups( const std::vector<int> &
numbers , int groupwidth ) {
std::vector<std::vector<int>> groups ;
int len = numbers.size( ) ;
std::vector<int> group ;
for ( int start = 0 ; start < len - groupwidth + 1 ; start++ ) {
int current = start ;
while ( current < (start + groupwidth) ) {
group.push_back( *(numbers.begin( ) + current) ) ;
current++ ;
}
groups.push_back( group ) ;
group.clear( ) ;
}
return groups ;
}
void printArray( const std::vector<int> & array ) {
int maximum = *std::max_element( array.begin( ) , array.end( ) ) ;
int len = array.size( ) ;
int current = maximum ;
while ( current > 0 ) {
std::cout << current ;
for ( int i = 0 ; i < len ; i++ ) {
if ( array[ i ] >= current )
std::cout << " #" ;
else
std::cout << " " ;
}
std::cout << '\n' ;
current-- ;
}
for ( int i = 0 ; i < len + 1 ; i++ ) {
std::cout << "- " ;
}
std::cout << '\n' ;
std::cout << " " ;
for ( int num : array )
std::cout << num << ' ' ;
std::cout << '\n' ;
}
std::vector<int> enterArray( ) {
std::cout << "Enter numbers ( 0 to end ) !\n" ;
std::vector<int> array ;
int num ;
std::cin >> num ;
while ( num != 0 ) {
array.push_back( num ) ;
std::cin >> num ;
}
return array ;
}
int main( ) {
std::vector<int> array = enterArray( ) ;
std::vector<std::vector<int>> allNeighbouringGroups ;
int len = array.size( ) ;
for ( int w = 2 ; w < len ; w++ ) {
std::vector<std::vector<int>> groups( createGroups( array, w ) ) ;
for ( const auto & myGroup : groups ) {
allNeighbouringGroups.push_back( myGroup ) ;
}
}
std::vector<int> areas ;
for ( const auto & myGroup : allNeighbouringGroups ) {
areas.push_back( *std::min_element( myGroup.begin( ) , myGroup.end( ))
* myGroup.size( ) ) ;
}
int totalMax = std::max( *std::max_element( areas.begin( ) , areas.end( ) ),
*std::min_element( array.begin( ) , array.end( ) ) * len ) ;
std::cout << "maximum rectangle area is " << totalMax << " !\n" ;
std::cout << std::endl ;
printArray( array ) ;
return 0 ;
}
|