Submission #516269

#TimeUsernameProblemLanguageResultExecution timeMemory
516269jk410Strange Device (APIO19_strange_device)C++17
100 / 100
685 ms86232 KiB
#include <bits/stdc++.h>
#define all(v) v.begin(),v.end()
using namespace std;
typedef long long ll;
struct gugan{
    ll l,r;
};
struct q{
    ll t;
    int v;
    bool operator<(const q &tmp)const{
        return t<tmp.t;
    }
};
int N;
ll A,B,T,Ans;
gugan G[1000001];
vector<q> V;
void f(ll l,ll r){
    V.push_back({l,1});
    V.push_back({r+1,-1});
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>N>>A>>B;
    if (log10(A/__gcd(A,B+1))+log10(B)>18)
        T=1e18+1;
    else
        T=A/__gcd(A,B+1)*B;
    for (int i=1; i<=N; i++){
        cin>>G[i].l>>G[i].r;
        if (G[i].r-G[i].l+1>=T){
            cout<<T;
            return 0;
        }
    }
    for (int i=1; i<=N; i++){
        G[i].l%=T;
        G[i].r%=T;
        if (G[i].l>G[i].r){
            f(0,G[i].r);
            f(G[i].l,T-1);
        }
        else
            f(G[i].l,G[i].r);
    }
    sort(all(V));
    for (int i=0,j,v=0,tmp; i<(int)V.size();){
        if (!v)
            tmp=i;
        for (j=i; j<(int)V.size()&&V[j].t==V[i].t; j++)
            v+=V[j].v;
        if (!v)
            Ans+=V[i].t-V[tmp].t;
        i=j;
    }
    cout<<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...