#include <sys/time.h>
#include <bits/stdc++.h>
using namespace std;
#define MAX_TIMER_NUM 256
static double s_tmptime[MAX_TIMER_NUM] = {}; // [s]
void stopwatch_start(int index)
{
if (index >= MAX_TIMER_NUM) {
cout << "INVALID TIMER NUM, IGNORED: MAX_TIMER_NUM is " << MAX_TIMER_NUM<< endl;
return;
}
struct timeval tim;
gettimeofday(&tim, NULL);
s_tmptime[index] = tim.tv_sec+(tim.tv_usec / 1000000.0);
}
double stopwatch_end(int index)
{
if (index >= MAX_TIMER_NUM) {
cout << "INVALID TIMER NUM, IGNORED: MAX_TIMER_NUM is " << MAX_TIMER_NUM<< endl;
return -1;
}
struct timeval tim;
gettimeofday(&tim, NULL);
return tim.tv_sec+(tim.tv_usec / 1000000.0) - s_tmptime[index];
}
double get_clock_now(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + (double)tv.tv_usec*1e-6;
}
#define rep(i,n) for(int i = 0; i < n; i++)
#define ll long long
vector<ll> a;
vector<ll> b;
int main(void) {
for (ll cycle = 1; cycle <= 10000000; cycle *= 10) {
cout << cycle << " ";
{
stopwatch_start(0);
rep(i, cycle) {
a.push_back(i);
}
double t = stopwatch_end(0);
cout << t << " ";
a.clear();
}
{
b.reserve(cycle);
stopwatch_start(0);
rep(i, cycle) {
b.push_back(i);
}
double t = stopwatch_end(0);
cout << t << " ";
b.clear();
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPHN5cy90aW1lLmg+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBNQVhfVElNRVJfTlVNIDI1NgpzdGF0aWMgZG91YmxlIHNfdG1wdGltZVtNQVhfVElNRVJfTlVNXSA9IHt9OyAvLyBbc10Kdm9pZCBzdG9wd2F0Y2hfc3RhcnQoaW50IGluZGV4KQp7CiAgICBpZiAoaW5kZXggPj0gTUFYX1RJTUVSX05VTSkgewogICAgICAgIGNvdXQgPDwgIklOVkFMSUQgVElNRVIgTlVNLCBJR05PUkVEOiBNQVhfVElNRVJfTlVNIGlzICIgPDwgTUFYX1RJTUVSX05VTTw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgc3RydWN0IHRpbWV2YWwgdGltOyAgCiAgICBnZXR0aW1lb2ZkYXkoJnRpbSwgTlVMTCk7ICAKICAgIHNfdG1wdGltZVtpbmRleF0gPSB0aW0udHZfc2VjKyh0aW0udHZfdXNlYyAvIDEwMDAwMDAuMCk7ICAKfQoKZG91YmxlIHN0b3B3YXRjaF9lbmQoaW50IGluZGV4KQp7CiAgICBpZiAoaW5kZXggPj0gTUFYX1RJTUVSX05VTSkgewogICAgICAgIGNvdXQgPDwgIklOVkFMSUQgVElNRVIgTlVNLCBJR05PUkVEOiBNQVhfVElNRVJfTlVNIGlzICIgPDwgTUFYX1RJTUVSX05VTTw8IGVuZGw7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgc3RydWN0IHRpbWV2YWwgdGltOyAgCiAgICBnZXR0aW1lb2ZkYXkoJnRpbSwgTlVMTCk7ICAKICAgIHJldHVybiB0aW0udHZfc2VjKyh0aW0udHZfdXNlYyAvIDEwMDAwMDAuMCkgLSBzX3RtcHRpbWVbaW5kZXhdOwp9Cgpkb3VibGUgZ2V0X2Nsb2NrX25vdyh2b2lkKQp7CiAgICBzdHJ1Y3QgdGltZXZhbCB0djsKICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwogICAgcmV0dXJuIHR2LnR2X3NlYyArIChkb3VibGUpdHYudHZfdXNlYyoxZS02Owp9CgoKI2RlZmluZSByZXAoaSxuKSBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQojZGVmaW5lIGxsIGxvbmcgbG9uZwp2ZWN0b3I8bGw+IGE7CnZlY3RvcjxsbD4gYjsKaW50IG1haW4odm9pZCkgewogICAgZm9yIChsbCBjeWNsZSA9IDE7IGN5Y2xlIDw9IDEwMDAwMDAwOyBjeWNsZSAqPSAxMCkgewogICAgICAgIGNvdXQgPDwgY3ljbGUgPDwgIiAiOwoKICAgICAgICB7CiAgICAgICAgICAgIHN0b3B3YXRjaF9zdGFydCgwKTsKICAgICAgICAgICAgcmVwKGksIGN5Y2xlKSB7CiAgICAgICAgICAgICAgICBhLnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkb3VibGUgdCA9IHN0b3B3YXRjaF9lbmQoMCk7CiAgICAgICAgICAgIGNvdXQgPDwgdCA8PCAiICI7CiAgICAgICAgICAgIGEuY2xlYXIoKTsKICAgICAgICB9CgogICAgICAgIHsKCSAgICAgICAgYi5yZXNlcnZlKGN5Y2xlKTsKICAgICAgICAgICAgc3RvcHdhdGNoX3N0YXJ0KDApOwogICAgICAgICAgICByZXAoaSwgY3ljbGUpIHsKICAgICAgICAgICAgICAgIGIucHVzaF9iYWNrKGkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvdWJsZSB0ID0gc3RvcHdhdGNoX2VuZCgwKTsKICAgICAgICAgICAgY291dCA8PCB0IDw8ICIgIjsKCSAgICAgICAgYi5jbGVhcigpOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K