//#pragma GCC optimize ("O3")
//#pragma GCC target ("avx")
#include "bits/stdc++.h" // define macro "/D__MAI"
using namespace std;
typedef long long int ll;
#define ALL(v) (v).begin(),(v).end()
#define repeat(cnt,l) for(auto cnt=0ll;cnt<(l);++cnt)
#define iterate(cnt,b,e) for(auto cnt=(b);cnt!=(e);++cnt)
#define TIME chrono::system_clock::now()
#define MILLISEC(t) (chrono::duration_cast<chrono::milliseconds>(t).count())
namespace {
auto my_nice_timer = TIME;
void tic(){ my_nice_timer = TIME; }
void toc(){ printf("[%lld msec]\n", MILLISEC(TIME-my_nice_timer)); }
}
struct MassiveStruct{
int my_nice_member[10000];
};
struct HugeStruct{
int my_nice_member[10000];
HugeStruct(){
fill(my_nice_member, my_nice_member+10000, 11451);
}
};
int main() {
{
tic();
vector<int> v;
repeat(i, 8000000){ v.push_back(i); }
toc();
}
{
tic();
vector<int> v;
v.reserve(8000010);
repeat(i, 8000000){ v.push_back(i); }
toc();
}
{
tic();
vector<int> v;
v.resize(8000010);
repeat(i, 8000000){ v[i] = i; }
toc();
}
// =========================
{
tic();
vector<MassiveStruct> v;
repeat(i, 1000){ v.emplace_back(); }
toc();
}
{
tic();
vector<MassiveStruct> v;
v.reserve(1005);
repeat(i, 1000){ v.emplace_back(); }
toc();
}
{
tic();
vector<MassiveStruct> v;
v.resize(1005);
toc();
}
// =========================
{
tic();
vector<HugeStruct> v;
repeat(i, 1000){ v.emplace_back(); }
toc();
}
{
tic();
vector<HugeStruct> v;
v.reserve(1005);
repeat(i, 1000){ v.emplace_back(); }
toc();
}
{
tic();
vector<HugeStruct> v;
v.resize(1005);
toc();
}
return 0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSAoIk8zIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQgKCJhdngiKQojaW5jbHVkZSAiYml0cy9zdGRjKysuaCIgLy8gZGVmaW5lIG1hY3JvICIvRF9fTUFJIgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwoKI2RlZmluZSBBTEwodikgKHYpLmJlZ2luKCksKHYpLmVuZCgpCiNkZWZpbmUgcmVwZWF0KGNudCxsKSBmb3IoYXV0byBjbnQ9MGxsO2NudDwobCk7KytjbnQpCiNkZWZpbmUgaXRlcmF0ZShjbnQsYixlKSBmb3IoYXV0byBjbnQ9KGIpO2NudCE9KGUpOysrY250KQoKCiNkZWZpbmUgVElNRSBjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkKI2RlZmluZSBNSUxMSVNFQyh0KSAoY2hyb25vOjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6bWlsbGlzZWNvbmRzPih0KS5jb3VudCgpKQoKbmFtZXNwYWNlIHsKICAgIGF1dG8gbXlfbmljZV90aW1lciA9IFRJTUU7CiAgICB2b2lkIHRpYygpeyBteV9uaWNlX3RpbWVyID0gVElNRTsgfQogICAgdm9pZCB0b2MoKXsgcHJpbnRmKCJbJWxsZCBtc2VjXVxuIiwgTUlMTElTRUMoVElNRS1teV9uaWNlX3RpbWVyKSk7IH0KfQoKc3RydWN0IE1hc3NpdmVTdHJ1Y3R7CiAgICBpbnQgbXlfbmljZV9tZW1iZXJbMTAwMDBdOwp9OwoKc3RydWN0IEh1Z2VTdHJ1Y3R7CiAgICBpbnQgbXlfbmljZV9tZW1iZXJbMTAwMDBdOwogICAgSHVnZVN0cnVjdCgpewogICAgICAgIGZpbGwobXlfbmljZV9tZW1iZXIsIG15X25pY2VfbWVtYmVyKzEwMDAwLCAxMTQ1MSk7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIHsKICAgICAgICB0aWMoKTsKICAgICAgICB2ZWN0b3I8aW50PiB2OwogICAgICAgIHJlcGVhdChpLCA4MDAwMDAwKXsgdi5wdXNoX2JhY2soaSk7IH0KICAgICAgICB0b2MoKTsKICAgIH0KICAgIHsKICAgICAgICB0aWMoKTsKICAgICAgICB2ZWN0b3I8aW50PiB2OwogICAgICAgIHYucmVzZXJ2ZSg4MDAwMDEwKTsKICAgICAgICByZXBlYXQoaSwgODAwMDAwMCl7IHYucHVzaF9iYWNrKGkpOyB9CiAgICAgICAgdG9jKCk7CiAgICB9CiAgICB7CiAgICAgICAgdGljKCk7CiAgICAgICAgdmVjdG9yPGludD4gdjsKICAgICAgICB2LnJlc2l6ZSg4MDAwMDEwKTsKICAgICAgICByZXBlYXQoaSwgODAwMDAwMCl7IHZbaV0gPSBpOyB9CiAgICAgICAgdG9jKCk7CiAgICB9CiAgICAKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgewogICAgICAgIHRpYygpOwogICAgICAgIHZlY3RvcjxNYXNzaXZlU3RydWN0PiB2OwogICAgICAgIHJlcGVhdChpLCAxMDAwKXsgdi5lbXBsYWNlX2JhY2soKTsgfQogICAgICAgIHRvYygpOwogICAgfQogICAgewogICAgICAgIHRpYygpOwogICAgICAgIHZlY3RvcjxNYXNzaXZlU3RydWN0PiB2OwogICAgICAgIHYucmVzZXJ2ZSgxMDA1KTsKICAgICAgICByZXBlYXQoaSwgMTAwMCl7IHYuZW1wbGFjZV9iYWNrKCk7IH0KICAgICAgICB0b2MoKTsKICAgIH0KICAgIHsKICAgICAgICB0aWMoKTsKICAgICAgICB2ZWN0b3I8TWFzc2l2ZVN0cnVjdD4gdjsKICAgICAgICB2LnJlc2l6ZSgxMDA1KTsKICAgICAgICB0b2MoKTsKICAgIH0KICAgIAogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PQogICAgCiAgICB7CiAgICAgICAgdGljKCk7CiAgICAgICAgdmVjdG9yPEh1Z2VTdHJ1Y3Q+IHY7CiAgICAgICAgcmVwZWF0KGksIDEwMDApeyB2LmVtcGxhY2VfYmFjaygpOyB9CiAgICAgICAgdG9jKCk7CiAgICB9CiAgICB7CiAgICAgICAgdGljKCk7CiAgICAgICAgdmVjdG9yPEh1Z2VTdHJ1Y3Q+IHY7CiAgICAgICAgdi5yZXNlcnZlKDEwMDUpOwogICAgICAgIHJlcGVhdChpLCAxMDAwKXsgdi5lbXBsYWNlX2JhY2soKTsgfQogICAgICAgIHRvYygpOwogICAgfQogICAgewogICAgICAgIHRpYygpOwogICAgICAgIHZlY3RvcjxIdWdlU3RydWN0PiB2OwogICAgICAgIHYucmVzaXplKDEwMDUpOwogICAgICAgIHRvYygpOwogICAgfQoKCiAgICByZXR1cm4gMDsKfQ==