#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
template <typename Containers>
std::vector<typename Containers::value_type::value_type> reduce_minelement(const Containers& containers)
{
typedef typename Containers::value_type slice_t;
typedef typename Containers::const_iterator slice_ci;
typedef typename slice_t::value_type element_t;
std::vector<element_t> result;
result.reserve(containers.size()); // pre-allocated
for (slice_ci it=containers.begin(); it!=containers.end(); ++it)
{
result.push_back(*std::min_element(it->begin(), it->end()));
}
return result;
}
typedef int ints_t[6];
static const ints_t s_data[] = {
{ 19152, 1, 21193, 17574, 8484, 30333 },
{ 20189, 18837, 30734, 2, 22440, 3534 },
{ 3, 26118, 19367, 17877, 24605, 7838 },
{ 30885, 20135, -4, 31316, 11838, 8926 },
{ 26830, 20209, 27286, 16105, 16601, 28304 },
{ 10208, 28062, 15612, 26270, 19234, 21326 },
{ 5208, 17473, 3383, 15659, 32494, 24231 },
{ 31685, 22500, 18860, 21318, 18893, 21385 },
{ 14295, 17163, 8920, 15986, 13448, 21143 },
{ 20199, 8954, 599, 17459, 3884, 8634 },
{ 16768, 20563, 6727, 26305, 11053, 6418 },
{ 7446, 6853, 5283, 6193, 28291, 4205 },
{ 27056, 17514, 5359, 29656, 10910, 6034 },
{ 21984, 1261, 2404, 17644, 25969, 1735 },
{ 797, 8457, 23584, 29363, 26362, 17383 },
{ 768, 11018, 14991, 0, 28720, 6159 },
};
int main()
{
std::vector<std::vector<int> > data;
for (const ints_t *it=s_data; it!=s_data+(sizeof(s_data)/sizeof(*s_data)); ++it)
data.push_back(std::vector<int>(*it+0, *it+sizeof(*it)/sizeof(**it)));
std::vector<int> reduced = reduce_minelement(data);
std::copy(reduced.begin(), reduced.end(), std::ostream_iterator<int>(std::cout, ", "));
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVycz4KCXN0ZDo6dmVjdG9yPHR5cGVuYW1lIENvbnRhaW5lcnM6OnZhbHVlX3R5cGU6OnZhbHVlX3R5cGU+IHJlZHVjZV9taW5lbGVtZW50KGNvbnN0IENvbnRhaW5lcnMmIGNvbnRhaW5lcnMpCnsKCXR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyczo6dmFsdWVfdHlwZSBzbGljZV90OwoJdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXJzOjpjb25zdF9pdGVyYXRvciBzbGljZV9jaTsKCXR5cGVkZWYgdHlwZW5hbWUgc2xpY2VfdDo6dmFsdWVfdHlwZSBlbGVtZW50X3Q7CglzdGQ6OnZlY3RvcjxlbGVtZW50X3Q+IHJlc3VsdDsKCXJlc3VsdC5yZXNlcnZlKGNvbnRhaW5lcnMuc2l6ZSgpKTsgLy8gcHJlLWFsbG9jYXRlZAoKCWZvciAoc2xpY2VfY2kgaXQ9Y29udGFpbmVycy5iZWdpbigpOyBpdCE9Y29udGFpbmVycy5lbmQoKTsgKytpdCkKCXsKCQlyZXN1bHQucHVzaF9iYWNrKCpzdGQ6Om1pbl9lbGVtZW50KGl0LT5iZWdpbigpLCBpdC0+ZW5kKCkpKTsKCX0KCglyZXR1cm4gcmVzdWx0Owp9Cgp0eXBlZGVmIGludCBpbnRzX3RbNl07CnN0YXRpYyBjb25zdCBpbnRzX3Qgc19kYXRhW10gPSB7IAoJeyAxOTE1MiwgICAgIDEsIDIxMTkzLCAxNzU3NCwgIDg0ODQsIDMwMzMzIH0sCgl7IDIwMTg5LCAxODgzNywgMzA3MzQsICAgICAyLCAyMjQ0MCwgIDM1MzQgfSwKCSAgICB7IDMsIDI2MTE4LCAxOTM2NywgMTc4NzcsIDI0NjA1LCAgNzgzOCB9LAoJeyAzMDg4NSwgMjAxMzUsICAgIC00LCAzMTMxNiwgMTE4MzgsICA4OTI2IH0sCgl7IDI2ODMwLCAyMDIwOSwgMjcyODYsIDE2MTA1LCAxNjYwMSwgMjgzMDQgfSwKCXsgMTAyMDgsIDI4MDYyLCAxNTYxMiwgMjYyNzAsIDE5MjM0LCAyMTMyNiB9LAoJIHsgNTIwOCwgMTc0NzMsICAzMzgzLCAxNTY1OSwgMzI0OTQsIDI0MjMxIH0sCgl7IDMxNjg1LCAyMjUwMCwgMTg4NjAsIDIxMzE4LCAxODg5MywgMjEzODUgfSwKCXsgMTQyOTUsIDE3MTYzLCAgODkyMCwgMTU5ODYsIDEzNDQ4LCAyMTE0MyB9LAoJeyAyMDE5OSwgIDg5NTQsICAgNTk5LCAxNzQ1OSwgIDM4ODQsICA4NjM0IH0sCgl7IDE2NzY4LCAyMDU2MywgIDY3MjcsIDI2MzA1LCAxMTA1MywgIDY0MTggfSwKCSB7IDc0NDYsICA2ODUzLCAgNTI4MywgIDYxOTMsIDI4MjkxLCAgNDIwNSB9LAoJeyAyNzA1NiwgMTc1MTQsICA1MzU5LCAyOTY1NiwgMTA5MTAsICA2MDM0IH0sCgl7IDIxOTg0LCAgMTI2MSwgIDI0MDQsIDE3NjQ0LCAyNTk2OSwgIDE3MzUgfSwKCSAgeyA3OTcsICA4NDU3LCAyMzU4NCwgMjkzNjMsIDI2MzYyLCAxNzM4MyB9LAoJICB7IDc2OCwgMTEwMTgsIDE0OTkxLCAgICAgMCwgMjg3MjAsICA2MTU5IH0sCn07CgppbnQgbWFpbigpCnsKCXN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGludD4gPiBkYXRhOwoJCglmb3IgKGNvbnN0IGludHNfdCAqaXQ9c19kYXRhOyBpdCE9c19kYXRhKyhzaXplb2Yoc19kYXRhKS9zaXplb2YoKnNfZGF0YSkpOyArK2l0KQoJCWRhdGEucHVzaF9iYWNrKHN0ZDo6dmVjdG9yPGludD4oKml0KzAsICppdCtzaXplb2YoKml0KS9zaXplb2YoKippdCkpKTsKCglzdGQ6OnZlY3RvcjxpbnQ+IHJlZHVjZWQgPSByZWR1Y2VfbWluZWxlbWVudChkYXRhKTsKCglzdGQ6OmNvcHkocmVkdWNlZC5iZWdpbigpLCByZWR1Y2VkLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIsICIpKTsKCglyZXR1cm4gMDsKfQoKCg==