#include <iostream>
#include <thread>
#include <vector>
#include <numeric>
#include <future>
#include <algorithm>
int sum( const int * a, const int * b)
{
std:: cout << std:: this_thread :: get_id ( ) << '\n ' ;
auto distance = b- a;
if ( distance < 5 ) // willkuerliche Grenze
return std:: accumulate ( a,b,0 ) ;
const int * half = a + distance/ 2 ;
auto fut_left = std:: async ( sum, a, half) ;
auto right = sum( half, b) ;
return fut_left.get ( ) + right;
}
int main( )
{
std:: vector < int > vec( 256 ) ;
std:: iota ( vec.begin ( ) , vec.end ( ) , 0 ) ;
std:: cout << sum( vec.data ( ) , vec.data ( ) + 256 ) << '\n ' ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGZ1dHVyZT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCmludCBzdW0oY29uc3QgaW50ICogYSwgY29uc3QgaW50ICogYikKewogICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSA8PCAnXG4nOwoKICAgICAgICBhdXRvIGRpc3RhbmNlID0gYi1hOwogICAgICAgIGlmKGRpc3RhbmNlIDwgNSkgLy8gd2lsbGt1ZXJsaWNoZSBHcmVuemUKICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmFjY3VtdWxhdGUoYSxiLDApOwoKICAgICAgICBjb25zdCBpbnQgKiBoYWxmID0gYSArIGRpc3RhbmNlLzI7CgogICAgICAgIGF1dG8gZnV0X2xlZnQgPSBzdGQ6OmFzeW5jKHN1bSwgYSwgaGFsZik7CiAgICAgICAgYXV0byByaWdodCA9IHN1bShoYWxmLCBiKTsKCiAgICAgICAgcmV0dXJuIGZ1dF9sZWZ0LmdldCgpICsgcmlnaHQ7Cn0KCmludCBtYWluKCkKewogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gdmVjKDI1Nik7CiAgICAgICAgc3RkOjppb3RhKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIDApOwogICAgICAgIHN0ZDo6Y291dCA8PCBzdW0odmVjLmRhdGEoKSwgdmVjLmRhdGEoKSsyNTYpIDw8ICdcbic7Cn0K