Submission #1189118

#TimeUsernameProblemLanguageResultExecution timeMemory
1189118AvianshStrange Device (APIO19_strange_device)C++20
10 / 100
280 ms40548 KiB
#include <bits/stdc++.h>

using namespace std;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    long long n,a,b;
    cin >> n >> a >> b;
    long long lc = a*b;
    if(log2(a)+log2(b)>61){
        lc=1e18+5;
    }
    assert(lc>0);
    //0->(lc-1)
    vector<array<long long,2>>rangs;
    for(int i = 0;i<n;i++){
        long long l,r;
        cin >> l >> r;
        long long lmod = l%lc;
        long long rmod = r%lc;
        long long req = lc-lmod-1;
        if(l+req<=r){
            //lmod-end is to be added.
            rangs.push_back({lmod,lc-1});
        }
        else{
            rangs.push_back({lmod,rmod});
        }
        l+=req+1;
        assert(l%lc==0);
        lmod=l%lc;
        if(l+lc-1<=r){
            rangs.push_back({0,lc-1});
        }
        else if(l<=r){
            rangs.push_back({0,rmod});
        }
    }
    sort(rangs.begin(),rangs.end());
    vector<array<long long,2>>ne;
    ne.push_back(*rangs.begin());
    for(array<long long,2>a:rangs){
        if(ne.back()[1]<a[0]){
            ne.push_back(a);
        }
        else{
            ne.back()[1]=max(ne.back()[1],a[1]);
        }
    }
    long long ans = 0;
    for(array<long long,2>a:ne){
        ans+=a[1]-a[0]+1;
    }
    cout << (long long)ans;
    return 0;
}
#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...