#include <vector>
#include <iostream>
#include <algorithm>
template<class T>
int find_max(std::vector<std::vector<T> > target_array);
int find_max(std::vector<int> target_array) {
using namespace std;
return *max_element(
target_array.begin(),
target_array.end());
}
template<class T>
int find_max(std::vector<std::vector<T> > target_array) {
using namespace std;
vector<int> reduced(target_array.size());
transform(
target_array.begin(),
target_array.end(),
reduced.begin(),
[](std::vector<T> v){ return find_max(v); });
return *max_element(
reduced.begin(),
reduced.end());
}
int main() {
using namespace std;
vector<int> array_1d = {1,3,4};
vector<vector<int>> array_2d = {{1,3},{3,5},{6,4}};
vector<vector<vector<int>>> array_3d = {{{1,3},{2,4}},{{6,7}}};
cout << "Max in 1d array: " << find_max(array_1d) << endl;
cout << "Max in 2d array: " << find_max(array_2d) << endl;
cout << "Max in 3d array: " << find_max(array_3d) << endl;
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdGVtcGxhdGU8Y2xhc3MgVD4KaW50IGZpbmRfbWF4KHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPFQ+ID4gdGFyZ2V0X2FycmF5KTsKCmludCBmaW5kX21heChzdGQ6OnZlY3RvcjxpbnQ+IHRhcmdldF9hcnJheSkgewoJdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCQoJcmV0dXJuICptYXhfZWxlbWVudCgKCQl0YXJnZXRfYXJyYXkuYmVnaW4oKSwKCQl0YXJnZXRfYXJyYXkuZW5kKCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgppbnQgZmluZF9tYXgoc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8VD4gPiB0YXJnZXRfYXJyYXkpIHsKCXVzaW5nIG5hbWVzcGFjZSBzdGQ7CgkKCXZlY3RvcjxpbnQ+IHJlZHVjZWQodGFyZ2V0X2FycmF5LnNpemUoKSk7CgkKCXRyYW5zZm9ybSgKCQl0YXJnZXRfYXJyYXkuYmVnaW4oKSwKCQl0YXJnZXRfYXJyYXkuZW5kKCksCgkJcmVkdWNlZC5iZWdpbigpLAoJCVtdKHN0ZDo6dmVjdG9yPFQ+IHYpeyByZXR1cm4gZmluZF9tYXgodik7IH0pOwoJCQoJcmV0dXJuICptYXhfZWxlbWVudCgKCQlyZWR1Y2VkLmJlZ2luKCksCgkJcmVkdWNlZC5lbmQoKSk7Cn0KCgppbnQgbWFpbigpIHsKCXVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICAgdmVjdG9yPGludD4gYXJyYXlfMWQgPSB7MSwzLDR9OwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhcnJheV8yZCA9IHt7MSwzfSx7Myw1fSx7Niw0fX07CiAgICB2ZWN0b3I8dmVjdG9yPHZlY3RvcjxpbnQ+Pj4gYXJyYXlfM2QgPSB7e3sxLDN9LHsyLDR9fSx7ezYsN319fTsKICAgIAogICAgY291dCA8PCAiTWF4IGluIDFkIGFycmF5OiAiIDw8IGZpbmRfbWF4KGFycmF5XzFkKSA8PCBlbmRsOwogICAgY291dCA8PCAiTWF4IGluIDJkIGFycmF5OiAiIDw8IGZpbmRfbWF4KGFycmF5XzJkKSA8PCBlbmRsOwogICAgY291dCA8PCAiTWF4IGluIDNkIGFycmF5OiAiIDw8IGZpbmRfbWF4KGFycmF5XzNkKSA8PCBlbmRsOyAKICAgIAogICAgcmV0dXJuIDA7ICAgICAgICAgIAp9