#include <iostream>
#include <thread>
#include <chrono>
#include <algorithm>
using namespace std;
using namespace std::chrono;
typedef long long int ull;
void findEven(ull start, ull end, ull* EvenSum) {
for (ull i = start; i <= end; ++i){
if (!(i & 1)){
*(EvenSum) += i;
}
}
}
void findOdd(ull start, ull end, ull* OddSum) {
for (ull i = start; i <= end; ++i){
if (i & 1){
(*OddSum) += i;
}
}
}
int main() {
ull start = 0, end = 1e9;
ull OddSum = 0;
ull EvenSum = 0;
auto startTime = high_resolution_clock::now();
// // WITH THREAD
std::thread t1(findEven, start, end, &(EvenSum));
std::thread t2(findOdd, start, end, &(OddSum));
t1.join();
t2.join();
// // WITHOUT THREAD
// findEven(start,end, &EvenSum);
// findOdd(start, end, &OddSum);
auto stopTime = high_resolution_clock::now();
auto duration = duration_cast<microseconds>(stopTime - startTime);
cout << "OddSum : " << OddSum << endl;
cout << "EvenSum : " << EvenSum << endl;
cout << "Sec: " << duration.count()/1000000 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87CnR5cGVkZWYgbG9uZyBsb25nIGludCAgdWxsOwoKdm9pZCBmaW5kRXZlbih1bGwgc3RhcnQsIHVsbCBlbmQsIHVsbCogRXZlblN1bSkgewoJZm9yICh1bGwgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKXsKCQlpZiAoIShpICYgMSkpewoJCQkqKEV2ZW5TdW0pICs9IGk7CgkJfQoJfQp9Cgp2b2lkIGZpbmRPZGQodWxsIHN0YXJ0LCB1bGwgZW5kLCB1bGwqIE9kZFN1bSkgewoJZm9yICh1bGwgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKXsKCQlpZiAoaSAmIDEpewoJCQkoKk9kZFN1bSkgKz0gaTsKCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJCgl1bGwgc3RhcnQgPSAwLCBlbmQgPSAxZTk7CgoJdWxsIE9kZFN1bSA9IDA7Cgl1bGwgRXZlblN1bSA9IDA7CiAgICAKICAgIGF1dG8gc3RhcnRUaW1lID0gaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsgCgoJLy8gLy8gV0lUSCBUSFJFQUQKICAgIHN0ZDo6dGhyZWFkIHQxKGZpbmRFdmVuLCBzdGFydCwgZW5kLCAmKEV2ZW5TdW0pKTsKICAgIHN0ZDo6dGhyZWFkIHQyKGZpbmRPZGQsIHN0YXJ0LCBlbmQsICYoT2RkU3VtKSk7CgoJdDEuam9pbigpOwoJdDIuam9pbigpOwoKCS8vIC8vIFdJVEhPVVQgVEhSRUFECgkvLyBmaW5kRXZlbihzdGFydCxlbmQsICZFdmVuU3VtKTsKCS8vIGZpbmRPZGQoc3RhcnQsIGVuZCwgJk9kZFN1bSk7CgkKICAgIGF1dG8gc3RvcFRpbWUgPSBoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOyAKICAgIGF1dG8gZHVyYXRpb24gPSBkdXJhdGlvbl9jYXN0PG1pY3Jvc2Vjb25kcz4oc3RvcFRpbWUgLSBzdGFydFRpbWUpOwoKCWNvdXQgPDwgIk9kZFN1bSA6ICIgPDwgT2RkU3VtIDw8IGVuZGw7Cgljb3V0IDw8ICJFdmVuU3VtIDogIiA8PCBFdmVuU3VtIDw8IGVuZGw7CgoJY291dCA8PCAiU2VjOiAiIDw8IGR1cmF0aW9uLmNvdW50KCkvMTAwMDAwMCA8PCBlbmRsOwoKCXJldHVybiAwOwp9