Submission #246143

#TimeUsernameProblemLanguageResultExecution timeMemory
246143user202729Strange Device (APIO19_strange_device)C++17
100 / 100
843 ms28532 KiB
//oj.uz/problem/view/APIO19_strange_device //already. #ifndef LOCAL #define NDEBUG 1 #endif #include<bits/stdc++.h> int main(){ std::ios::sync_with_stdio(0);std::cin.tie(0); int number; int64_t a, b; std::cin>>number>>a>>b; auto const c=a/std::gcd(a, b+1); int64_t const period=(double)b*(double)c>2e18 ? INT64_MAX: b*c; struct Event{ bool open: 1; uint64_t position: 63; uint64_t key() const{ uint64_t result=position<<1|open; assert(result==*(uint64_t*) this); return result; //return position; } bool operator<(Event it) const{ return key()<it.key(); } }; std::vector<Event> events; events.reserve(number*4); auto const addSegment=[&](int64_t first, int64_t sec){ assert(first<sec); events.push_back({true, (((uint64_t)1<<63)-1)&first}); events.push_back({false, (((uint64_t)1<<63)-1)&sec}); }; for(int _=0; _<number; ++_){ int64_t first, sec; std::cin>>first>>sec; ++sec; if(sec-first>=period){ std::cout<<period<<'\n'; return 0; } first%=period; sec%=period; if(first<sec){ addSegment(first, sec); }else{ assert(first!=sec); addSegment(first, period); if(sec) addSegment(0, sec); } } std::sort(begin(events), end(events)); int64_t result{}; int degree{}; for(auto [open, position]: events){ if(open){ if(degree==0) result-=position; ++degree; }else{ --degree; if(degree==0) result+=position; //assert(degree>=0); //actually this is not guaranteed because of how stuff are sorted... } } std::cout<<result<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...