#include <iostream>
#include <vector>
#include <numeric>
#include <iomanip>
std::vector<std::vector<int> > sums(int array[], int size)
{
std::vector<std::vector<int> > result(size - 1);
//build the two element sums
for(int *p = array; p - array < size - 1; ++p)
result[0].push_back(std::accumulate(p, p + 2, 0));
//build the rest of the sums
for(int i = 1; i < size - 1; ++i)
for(int j = 0; j < size - (i + 1); ++j)
result[i].push_back(result[i - 1][j] + array[i + j + 1]);
return result;
}
int main()
{
int array[] = {1, 2, 3, 4, 5};
for(int i = 0; i < sizeof(array)/sizeof(*array); ++i)
{
std::cout << std::setw(3) << array[i];
}
std::cout << std::endl;
std::vector<std::vector<int> > v = sums(array, sizeof(array)/sizeof(*array));
for(int i = 0; i < v.size(); ++i)
{
for(int j = 0; j < v[i].size(); ++j)
std::cout << std::setw(3) << v[i][j];
std::cout << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGlvbWFuaXA+CgpzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+ID4gc3VtcyhpbnQgYXJyYXlbXSwgaW50IHNpemUpCnsKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+ID4gcmVzdWx0KHNpemUgLSAxKTsKICAgICAgICAvL2J1aWxkIHRoZSB0d28gZWxlbWVudCBzdW1zCiAgICAgICAgZm9yKGludCAqcCA9IGFycmF5OyBwIC0gYXJyYXkgPCBzaXplIC0gMTsgKytwKQogICAgICAgICAgICAgICAgcmVzdWx0WzBdLnB1c2hfYmFjayhzdGQ6OmFjY3VtdWxhdGUocCwgcCArIDIsIDApKTsKICAgICAgICAvL2J1aWxkIHRoZSByZXN0IG9mIHRoZSBzdW1zCiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8IHNpemUgLSAxOyArK2kpCiAgICAgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgc2l6ZSAtIChpICsgMSk7ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldLnB1c2hfYmFjayhyZXN1bHRbaSAtIDFdW2pdICsgYXJyYXlbaSArIGogKyAxXSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7CiAgICAgICAgaW50IGFycmF5W10gPSB7MSwgMiwgMywgNCwgNX07CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNpemVvZihhcnJheSkvc2l6ZW9mKCphcnJheSk7ICsraSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjpzZXR3KDMpIDw8IGFycmF5W2ldOwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGludD4gPiB2ID0gc3VtcyhhcnJheSwgc2l6ZW9mKGFycmF5KS9zaXplb2YoKmFycmF5KSk7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyArK2kpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHZbaV0uc2l6ZSgpOyArK2opCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OnNldHcoMykgPDwgdltpXVtqXTsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgfQp9