#include <chrono>
#include <iostream>
#include <queue>
#include <random>
#include <thread>
int main()
{
using clock = std::chrono::steady_clock;
using time_point = clock::time_point;
using time_unit = std::chrono::milliseconds;
std::default_random_engine engine;
std::uniform_int_distribution<unsigned> dist{0, 15};
std::priority_queue<time_point, std::vector<time_point>, std::greater<time_point>> queue;
std::cout << "input:\n";
auto start = clock::now();
for (unsigned i = 0; i != 10; ++i)
{
auto num = dist(engine);
std::cout << num << "\n";
auto time = start + time_unit{num};
queue.push(time);
}
std::cout << "output:\n";
while (!queue.empty())
{
auto next = queue.top();
std::this_thread::sleep_until(next);
auto ms = std::chrono::duration_cast<time_unit>(next - start);
std::cout << ms.count() << "\n";
queue.pop();
}
}
I2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxyYW5kb20+CiNpbmNsdWRlIDx0aHJlYWQ+CgppbnQgbWFpbigpCnsKCXVzaW5nIGNsb2NrID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazsKCXVzaW5nIHRpbWVfcG9pbnQgPSBjbG9jazo6dGltZV9wb2ludDsKCXVzaW5nIHRpbWVfdW5pdCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM7CgoJc3RkOjpkZWZhdWx0X3JhbmRvbV9lbmdpbmUgZW5naW5lOwoJc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248dW5zaWduZWQ+IGRpc3R7MCwgMTV9OwoJc3RkOjpwcmlvcml0eV9xdWV1ZTx0aW1lX3BvaW50LCBzdGQ6OnZlY3Rvcjx0aW1lX3BvaW50Piwgc3RkOjpncmVhdGVyPHRpbWVfcG9pbnQ+PiBxdWV1ZTsKCglzdGQ6OmNvdXQgPDwgImlucHV0OlxuIjsKCWF1dG8gc3RhcnQgPSBjbG9jazo6bm93KCk7Cglmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IDEwOyArK2kpCgl7CgkJYXV0byBudW0gPSBkaXN0KGVuZ2luZSk7CgkJc3RkOjpjb3V0IDw8IG51bSA8PCAiXG4iOwoJCWF1dG8gdGltZSA9IHN0YXJ0ICsgdGltZV91bml0e251bX07CgkJcXVldWUucHVzaCh0aW1lKTsKCX0KCglzdGQ6OmNvdXQgPDwgIm91dHB1dDpcbiI7Cgl3aGlsZSAoIXF1ZXVlLmVtcHR5KCkpCgl7CgkJYXV0byBuZXh0ID0gcXVldWUudG9wKCk7CgkJc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfdW50aWwobmV4dCk7CgkJYXV0byBtcyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHRpbWVfdW5pdD4obmV4dCAtIHN0YXJ0KTsKCQlzdGQ6OmNvdXQgPDwgbXMuY291bnQoKSA8PCAiXG4iOwoJCXF1ZXVlLnBvcCgpOwoJfQp9