#include <algorithm>
#include <vector>
#include <iostream>
unsigned int get_min_partition3_value(const std::vector<unsigned int>& v)
{
const unsigned int total_sum = std::accumulate(v.begin(), v.end(), 0u);
auto it1 = v.begin();
auto it2 = v.end();
unsigned int part1 = 0;
unsigned int part2 = total_sum;
unsigned int part3 = 0;
unsigned int res = part2;
while (part1 < part2 && part3 < part2) {
res = part2; // part2 is greater than part1&part2
if (part1 + *it1 < part3 + *(it2 - 1)) {
part1 += *it1;
part2 -= *it1;
++it1;
} else {
--it2;
part3 += *it2;
part2 -= *it2;
}
}
res = std::min(res, std::max(part1, part3));
return res;
}
int main()
{
std::cout << get_min_partition3_value({}) << std::endl; // 0
std::cout << get_min_partition3_value({ 1, 1, 1, 1, 1, 1 }) << std::endl; // 2
std::cout << get_min_partition3_value({ 2, 80, 50, 42, 1, 1, 1, 2 }) << std::endl; // 82
std::cout << get_min_partition3_value({ 2, 5, 80, 1, 200, 80, 8000, 90 }) << std::endl; // 8000
std::cout << get_min_partition3_value({5, 6, 1, 4, 9, 3, 1, 2}) << std::endl; // 13
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdW5zaWduZWQgaW50IGdldF9taW5fcGFydGl0aW9uM192YWx1ZShjb25zdCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+JiB2KQp7CiAgICBjb25zdCB1bnNpZ25lZCBpbnQgdG90YWxfc3VtID0gc3RkOjphY2N1bXVsYXRlKHYuYmVnaW4oKSwgdi5lbmQoKSwgMHUpOwogICAgYXV0byBpdDEgPSB2LmJlZ2luKCk7CiAgICBhdXRvIGl0MiA9IHYuZW5kKCk7CiAgICB1bnNpZ25lZCBpbnQgcGFydDEgPSAwOwogICAgdW5zaWduZWQgaW50IHBhcnQyID0gdG90YWxfc3VtOwogICAgdW5zaWduZWQgaW50IHBhcnQzID0gMDsKICAgIHVuc2lnbmVkIGludCByZXMgPSBwYXJ0MjsKCiAgICB3aGlsZSAocGFydDEgPCBwYXJ0MiAmJiBwYXJ0MyA8IHBhcnQyKSB7CiAgICAgICAgcmVzID0gcGFydDI7IC8vIHBhcnQyIGlzIGdyZWF0ZXIgdGhhbiBwYXJ0MSZwYXJ0MgogICAgICAgIGlmIChwYXJ0MSArICppdDEgPCBwYXJ0MyArICooaXQyIC0gMSkpIHsKICAgICAgICAgICAgcGFydDEgKz0gKml0MTsKICAgICAgICAgICAgcGFydDIgLT0gKml0MTsKICAgICAgICAgICAgKytpdDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLS1pdDI7CiAgICAgICAgICAgIHBhcnQzICs9ICppdDI7CiAgICAgICAgICAgIHBhcnQyIC09ICppdDI7CiAgICAgICAgfQogICAgfQogICAgcmVzID0gc3RkOjptaW4ocmVzLCBzdGQ6Om1heChwYXJ0MSwgcGFydDMpKTsKICAgIHJldHVybiByZXM7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8IGdldF9taW5fcGFydGl0aW9uM192YWx1ZSh7fSkgPDwgc3RkOjplbmRsOyAvLyAwCiAgICBzdGQ6OmNvdXQgPDwgZ2V0X21pbl9wYXJ0aXRpb24zX3ZhbHVlKHsgMSwgMSwgMSwgMSwgMSwgMSB9KSA8PCBzdGQ6OmVuZGw7IC8vIDIKICAgIHN0ZDo6Y291dCA8PCBnZXRfbWluX3BhcnRpdGlvbjNfdmFsdWUoeyAyLCA4MCwgNTAsIDQyLCAxLCAxLCAxLCAyIH0pIDw8IHN0ZDo6ZW5kbDsgLy8gODIKICAgIHN0ZDo6Y291dCA8PCBnZXRfbWluX3BhcnRpdGlvbjNfdmFsdWUoeyAyLCA1LCA4MCwgMSwgMjAwLCA4MCwgODAwMCwgOTAgfSkgPDwgc3RkOjplbmRsOyAvLyA4MDAwCiAgICBzdGQ6OmNvdXQgPDwgZ2V0X21pbl9wYXJ0aXRpb24zX3ZhbHVlKHs1LCA2LCAxLCA0LCA5LCAzLCAxLCAyfSkgPDwgc3RkOjplbmRsOyAvLyAxMwp9Cg==