제출 #1182052

#제출 시각아이디문제언어결과실행 시간메모리
1182052SalihSahin이상한 기계 (APIO19_strange_device)C++20
45 / 100
683 ms94860 KiB
#include "bits/stdc++.h"
#define pb push_back
#define int long long
using namespace std;

const int inf = 3e18;
const int N = 1e6;

int32_t main(){
   ios_base::sync_with_stdio(0);
   cin.tie(0), cout.tie(0);
   int n, a, b;
   cin>>n>>a>>b;
   vector<int> l(n), r(n);
   for(int i = 0; i < n; i++){
      cin>>l[i]>>r[i];
      l[i]--, r[i]--;
   }

   bool big = 0;
   int gc = gcd(a, b+1);

   big |= (a > inf / gc / b);
   big |= (b > inf / gc / a);
   big |= (gc > inf / a / b);
   
   if(big){
      int tot = 0;
      for(int i = 0; i < n; i++){
         int len = r[i] - l[i] + 1;
         tot += len;
      }
      cout<<tot<<endl;
      return 0;
   }

   int per = a / gc * b;

   bool all = 0;
   vector<pair<int, int> > upd;
   set<int> ste;
   int add0 = 0;

   for(int i = 0; i < n; i++){
      int df = (r[i] / per) - (l[i] / per);
      int lmod = l[i] % per;
      int rmod = r[i] % per;
      ste.insert(lmod);
      ste.insert(rmod+1);

      if(r[i] - l[i] + 1 >= per) all = 1;
      else if(df == 1){
         add0++;
      }
      upd.pb({lmod, rmod+1});
   }
   ste.insert(0);
   ste.insert(per);

   vector<int> vec;
   for(auto itr: ste){
      vec.pb(itr);
   }
   vector<int> add(ste.size());
   add[0] += add0;

   for(auto itr: upd){
      auto l = lower_bound(vec.begin(), vec.end(), itr.first) - vec.begin();
      auto r = lower_bound(vec.begin(), vec.end(), itr.second) - vec.begin();
      add[l]++;
      add[r]--;
   }

   if(all){
      cout<<per<<endl;
   }
   else{
      int ans = 0, now = 0;
      for(int i = 0; i < vec.size()-1; i++){
         now += add[i];
         if(now > 0){
            ans += vec[i+1] - vec[i];
         }
      }
      cout<<ans<<endl;
   }
   
   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...