Submission #742729

#TimeUsernameProblemLanguageResultExecution timeMemory
742729speedyArdaStrange Device (APIO19_strange_device)C++14
5 / 100
2425 ms183864 KiB
#include "bits/stdc++.h"

using namespace std;
using ll = long long;
const int MAXN = 2e6+5;
map<ll, bool> visited;
vector< pair<ll, ll> > imp;
ll n, a, b;

int main() 
{
    cin >> n >> a >> b;
    ll sum = 0;
    ll big = 1;
    bool add = false;
    if(1e18 / b < a)
        add = true;
    else
        big = a * b;
    for(int i = 1; i <= n; i++)
    {

        ll f, s;
        cin >> f >> s;
        if(add)
            sum = s - f;
        else 
        {
            if(s - f >= big)
            {
                imp.push_back({0, 1});
                imp.push_back({big - 1, 2});
            } else 
            {
                if(f % big <= s % big)
                {
                    imp.push_back({f % big, 1});
                    imp.push_back({s % big, 2});
                } else 
                {
                    imp.push_back({0, 1});
                    imp.push_back({s % big, 2});
                    imp.push_back({f % big, 1});
                    imp.push_back({big - 1, 2});
                }

            }
            
        }

       
    }

    if(add)
    {
        cout << sum << "\n";
        return 0;
    }
   // cout << seg[0].sum << "\n";
    sort(imp.begin(), imp.end());
        int cnt = 0;
        ll ans = 0;
        ll last = -1;
        for(pair<ll, ll> e : imp)
        {
            //cout << ans << " " << cnt << " " << last << "\n";
            if(last != -1 && cnt > 0)
            {
                ans += e.first - last;
                if(!visited[last])
                {
                    ans++;
                    visited[last] = true;
                }
                visited[e.first] = true;
            }
            if(e.second == 1)
            {
                cnt++;
                last = e.first;
            } else 
            {   
                cnt--;
                last = e.first;
            }   
        }
        cout << ans << "\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...