Submission #1044642

#TimeUsernameProblemLanguageResultExecution timeMemory
1044642vjudge1Strange Device (APIO19_strange_device)C++17
100 / 100
257 ms37560 KiB
#pragma GCC optimize("unroll-loops,Ofast,O3")
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define spc << " " <<
#define endl "\n"
#define all(x) x.begin(), x.end()
#define int long long
#define ii pair<long long,int>
#define vi vector<int>
#define vii vector<ii>
#define st first
#define nd second
#define inf 1e15
#define MOD 1000000007
#define MX 200005
using namespace std;



void solve(){
    int n,A,B; cin >> n >> A >> B;
    vii seg;
    A = A/__gcd(B+1, A);
    if(sqrt(A)*sqrt(B)>=1e9){
        int ans=0;
        for(int i=1; i<=n; i++){
            int l,r; cin >> l >> r;
            ans+=r-l+1;
        }
        cout << ans << endl;
        return;
    }
    int wow = A*B;
    //cerr << wow << endl;
    for(int i=1; i<=n; i++){
        int l,r; cin >> l >> r;
        if(r-l+1>=wow){
            cout << wow << endl;
            return;
        }
        l%=wow; r%=wow;
        if(r>=l) seg.pb({l,r});
        else{
            seg.pb({0,r});
            seg.pb({l, wow-1});
        }
    }
    sort(all(seg));
    int ans=0, cur=-1;
    for(auto p:seg){
        //cerr << p.st spc p.nd << endl;
        ans += max((int)0, min(p.nd-p.st+1, p.nd-cur));
        cur = max(cur, p.nd);
    }
    cout << ans << endl;
}
 
 
signed main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    #ifdef Local
    freopen("in","r",stdin);
    freopen("out","w",stdout);
    #endif
 
    /*freopen("nondec.in","r",stdin);
    freopen("nondec.out","w",stdout);*/
 
    int t=1;
    //cin >> t;
    while(t--) solve();
}
#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...