#include <iostream>
#include <unordered_map>
#include <numeric>
#include <type_traits>

#include <vector>
#include <cstdio>
#include <memory>
#include <thread>
#include <cstring>
#include <numeric>
#include <list>
#include <fstream>
#include <mutex>
#include <future>
#include <random>

int main(int argc, char **argv){
//     std::cout<<sizeof(std::atomic<double>)<<std::endl;
//     std::cout<<sizeof(std::atomic<int>)<<std::endl;
//     uint64_t M = 100000;
//     uint64_t N = 10000;
// {
//     time_t time_now = time(NULL);
//     std::cout<<"int\ncompute end: "<<ctime(&time_now)<<"\n";
//     std::mt19937 mt_rand;
//     mt_rand.seed(0);

//     uint64_t value = 0;

//     for(uint64_t i = 0; i < M; ++i){
//         uint64_t offset = mt_rand();
//         for(uint64_t j = 0; j < N; ++j){
//             value += offset;
//         }
//     }

//     time_t time_end = time(NULL);
//     std::cout<<"value: "<<value<<"\n";
//     std::cout<<"compute end: "<<ctime(&time_end)<<"\n";
// }

// {
//     time_t time_now = time(NULL);
//     std::cout<<"atomic_int\ncompute end: "<<ctime(&time_now)<<"\n";
//     std::mt19937 mt_rand;
//     mt_rand.seed(0);

//     std::atomic<uint64_t> value = 0;

//     for(uint64_t i = 0; i < M; ++i){
//         uint64_t offset = mt_rand();
//         for(uint64_t j = 0; j < N; ++j){
//             value += offset;
//         }
//     }

//     time_t time_end = time(NULL);
//     std::cout<<"value: "<<value<<"\n";
//     std::cout<<"compute end: "<<ctime(&time_end)<<"\n";
// }

    int (*arr)[10] = new int [5][10];
}