#include <array>
#include <chrono>
#include <iostream>
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
void maxArray(double* x, double* y) {
for (int i = 0; i < 65536; i++) {
if (y[i] > x[i]) x[i] = y[i];
}
}
void maxArrayCPPP(std::array<double,65536>& x, std::array<double,65536>& y)
{
for (auto& _x : x)
{
const auto dist = &_x - &x[0];
const auto& _y = y[dist];
if (_y> _x) _x=_y;
}
}
int main()
{
array<double,65536> arr1;
array<double,65536> arr2;
std::uniform_real_distribution<double> unif(0,100);
std::mt19937 rand_engine; // mt19937 is a good pseudo-random number
// generator.
generate(arr1.begin(), arr1.end(), [&] () { return unif(rand_engine); });
generate(arr2.begin(), arr2.end(), [&] () { return unif(rand_engine); });
using namespace std::chrono;
using clock = steady_clock;
clock::time_point start = clock::now();
long long s = 0;
//for(long long i = 1; i <= 1; ++i) maxArray(&arr1[0], &arr2[0]);
for(long long i = 1; i <= 1; ++i) maxArrayCPPP(arr1, arr2);
clock::time_point stop = clock::now();
auto diff = duration_cast<duration<double>>(stop - start).count();
cout << s << endl;
cout << "seconds diff: " << diff << endl;
for (auto it = arr1.begin(); it != arr1.begin()+10; ++it)
{
cout << ": " << *it << endl;
}
return 0;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxyYW5kb20+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgbWF4QXJyYXkoZG91YmxlKiB4LCBkb3VibGUqIHkpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjU1MzY7IGkrKykgewogICAgICAgIGlmICh5W2ldID4geFtpXSkgeFtpXSA9IHlbaV07CiAgICB9Cn0KCgp2b2lkIG1heEFycmF5Q1BQUChzdGQ6OmFycmF5PGRvdWJsZSw2NTUzNj4mIHgsIHN0ZDo6YXJyYXk8ZG91YmxlLDY1NTM2PiYgeSkgCnsKCWZvciAoYXV0byYgX3ggOiB4KQoJewoJCWNvbnN0IGF1dG8gZGlzdCA9ICZfeCAtICZ4WzBdOwoJCWNvbnN0IGF1dG8mIF95ID0geVtkaXN0XTsKCQlpZiAoX3k+IF94KSBfeD1feTsKCX0KfQoKCgppbnQgbWFpbigpCnsKCWFycmF5PGRvdWJsZSw2NTUzNj4gYXJyMTsKCWFycmF5PGRvdWJsZSw2NTUzNj4gYXJyMjsKCXN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxkb3VibGU+IHVuaWYoMCwxMDApOwogICAgc3RkOjptdDE5OTM3IHJhbmRfZW5naW5lOyAvLyBtdDE5OTM3IGlzIGEgZ29vZCBwc2V1ZG8tcmFuZG9tIG51bWJlciAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdG9yLgoKICAgIGdlbmVyYXRlKGFycjEuYmVnaW4oKSwgYXJyMS5lbmQoKSwgWyZdICgpIHsgcmV0dXJuIHVuaWYocmFuZF9lbmdpbmUpOyB9KTsKICAgIGdlbmVyYXRlKGFycjIuYmVnaW4oKSwgYXJyMi5lbmQoKSwgWyZdICgpIHsgcmV0dXJuIHVuaWYocmFuZF9lbmdpbmUpOyB9KTsKICAKCXVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKCXVzaW5nIGNsb2NrID0gc3RlYWR5X2Nsb2NrOwoJY2xvY2s6OnRpbWVfcG9pbnQgc3RhcnQgPSBjbG9jazo6bm93KCk7Cglsb25nIGxvbmcgcyA9IDA7CgoJLy9mb3IobG9uZyBsb25nIGkgPSAxOyBpIDw9IDE7ICsraSkgbWF4QXJyYXkoJmFycjFbMF0sICZhcnIyWzBdKTsKCWZvcihsb25nIGxvbmcgaSA9IDE7IGkgPD0gMTsgKytpKSBtYXhBcnJheUNQUFAoYXJyMSwgYXJyMik7CgogIAljbG9jazo6dGltZV9wb2ludCBzdG9wID0gY2xvY2s6Om5vdygpOwoJYXV0byBkaWZmID0gZHVyYXRpb25fY2FzdDxkdXJhdGlvbjxkb3VibGU+PihzdG9wIC0gc3RhcnQpLmNvdW50KCk7CgoJY291dCA8PCBzIDw8IGVuZGw7Cgljb3V0IDw8ICJzZWNvbmRzIGRpZmY6ICIgPDwgZGlmZiA8PCBlbmRsOwoKCWZvciAoYXV0byBpdCA9IGFycjEuYmVnaW4oKTsgaXQgIT0gYXJyMS5iZWdpbigpKzEwOyArK2l0KQoJewoJCWNvdXQgPDwgIjogIiA8PCAqaXQgPDwgZW5kbDsKCX0KCglyZXR1cm4gMDsKfQoKICAKICA=