#include <iostream>
#include <chrono>
#include <vector>
#include <algorithm>
#include <iterator>
using Time = std:: chrono :: high_resolution_clock ;
using us = std:: chrono :: microseconds ;
int main( )
{
for ( int z= 0 ; z< 20 ; z++ ) {
volatile int i, k;
const int n = 1000000 , kmax= 200 ,n_avg= 30 ;
std:: vector < long > v( kmax,0 ) ;
for ( k = 0 ; k < kmax; ++ k) {
auto begin = Time:: now ( ) ;
for ( i = 0 ; i < n; ++ i) ; // <--
auto end = Time:: now ( ) ;
auto dur = std:: chrono :: duration_cast < us> ( end - begin) .count ( ) ;
v[ k] = dur;
}
long avg1= 1 ,avg2= 0 ;
for ( int j= 0 ; j< n_avg; j++ ) { avg1+ = v[ j] ; avg2+ = v[ kmax- 1 - j] ; }
avg1 / = n_avg; avg2 / = n_avg;
std:: cout << "Values between " << * min_element( v.begin ( ) ,v.end ( ) ) << "-" << * max_element( v.begin ( ) , v.end ( ) ) << " " ;
std:: cout << "Average " << n_avg<< " first/last : " << avg1 << "-" << avg2<< " " ;
if ( avg1>= avg2) std:: cout << avg1- avg2;
std:: cout << std:: endl ;
//std::copy (v.begin(), v.end(), std::ostream_iterator<long>(std::cout,"\n"));
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgp1c2luZyBUaW1lID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazsKdXNpbmcgdXMgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOwoKaW50IG1haW4oKQp7CiAgZm9yIChpbnQgej0wO3o8MjA7eisrKSB7CQogICAgdm9sYXRpbGUgaW50IGksIGs7CiAgICBjb25zdCBpbnQgbiA9IDEwMDAwMDAsIGttYXg9MjAwLG5fYXZnPTMwOwogICAgc3RkOjp2ZWN0b3I8bG9uZz4gdihrbWF4LDApOyAKCiAgICBmb3IoayA9IDA7IGsgPCBrbWF4OyArK2spIHsKICAgICAgICAgICAgYXV0byBiZWdpbiA9IFRpbWU6Om5vdygpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKTsgIC8vIDwtLQogICAgICAgICAgICBhdXRvIGVuZCA9IFRpbWU6Om5vdygpOwogICAgICAgICAgICBhdXRvIGR1ciA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHVzPihlbmQgLSBiZWdpbikuY291bnQoKTsKICAgICAgICAgICAgdltrXT1kdXI7ICAKICAgIH0KICAgIAogICAgbG9uZyBhdmcxPTEsYXZnMj0wOyAKCWZvciAoaW50IGo9MDsgajxuX2F2ZzsgaisrKXsgYXZnMSs9dltqXTsgYXZnMis9dltrbWF4LTEtal07IH0KCWF2ZzEgLz1uX2F2ZzsgYXZnMiAvPW5fYXZnOyAKICAgIHN0ZDo6Y291dCA8PCJWYWx1ZXMgYmV0d2VlbiAiPDwgKm1pbl9lbGVtZW50KHYuYmVnaW4oKSx2LmVuZCgpKSAgPDwiLSI8PCAqbWF4X2VsZW1lbnQodi5iZWdpbigpLCB2LmVuZCgpKSA8PCIgICI7IAogICAgc3RkOjpjb3V0IDw8ICJBdmVyYWdlICI8PG5fYXZnPDwiIGZpcnN0L2xhc3QgOiAiIDw8IGF2ZzEgPDwiLSI8PGF2ZzI8PCIgICI7CiAgICBpZiAoYXZnMT49YXZnMikgc3RkOjpjb3V0PDwgYXZnMS1hdmcyOyAKICAgIHN0ZDo6Y291dDw8c3RkOjplbmRsOyAKICAgIC8vc3RkOjpjb3B5ICh2LmJlZ2luKCksIHYuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxsb25nPihzdGQ6OmNvdXQsIlxuIikpOyAKICB9CiAgcmV0dXJuIDA7Cn0=