Submission #1200928

#TimeUsernameProblemLanguageResultExecution timeMemory
1200928PlayVoltzStrange Device (APIO19_strange_device)C++20
100 / 100
277 ms32680 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 1e6 + 11;

ll n, a, b, c, res;
ll l[N], r[N];

__int128 val;

vector < pair < ll, ll > > seg;

void solve(){
    cin >> n >> a >> b;
    for(ll i = 1; i <= n; i++) cin >> l[i] >> r[i]; 
    val = a / __gcd(a, b + 1), val *= b;
    if(val > 1e18){
        for(ll i = 1; i <= n; i++) res += r[i] - l[i] + 1;
        cout << res;
        return;
    }
    c = val;
    for(ll i = 1; i <= n; i++){
        if(r[i] - l[i] + 1 >= c){ cout << c << '\n'; return; }
        l[i] %= c, r[i] %= c;
        if(l[i] <= r[i]) seg.push_back({l[i], r[i]});
        else seg.push_back({l[i], c - 1}), seg.push_back({0, r[i]});
    }
    sort(seg.begin(), seg.end());
    ll mx = -1;
    for(auto [l, r] : seg){
        if(r > mx){
            res += r - max(l - 1, mx);
            mx = r;
        }
    }
    cout << res;
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int tt = 1;
    // cin >> tt;
    while(tt--) 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...