Submission #1181906

#TimeUsernameProblemLanguageResultExecution timeMemory
1181906SalihSahinStrange Device (APIO19_strange_device)C++20
5 / 100
1006 ms125724 KiB
#include "bits/stdc++.h"
#define pb push_back
#define int long long
using namespace std;

const int inf = 2e18;
const int mod = 998244353;
const int N = 2e6 + 5;

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]--;
   }

   if(a > inf / b){
      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 * b;

   bool all = 0;
   map<int, int> upd;
   set<int> ste;

   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);
      if(rmod != a*b-1) ste.insert(rmod+1);

      if((r[i] - l[i] + 1) >= per) all = 1;
      else if(df == 1){
         upd[lmod]++;
         upd[0]++;
         if(rmod != a*b-1) upd[rmod+1]--;
      }
      else{
         upd[lmod]++;
         if(rmod != a*b-1) upd[rmod+1]--;
      }
   }
   ste.insert(0);
   ste.insert(a*b-1);

   if(all){
      cout<<a*b<<endl;
   }
   else{
      int ans = 0, delt = 0, lst = 0;
      for(auto itr: ste){
         if(delt > 0){
            ans += (itr - lst);
         }
         delt += upd[itr];
         lst = itr;
      }
      if(delt > 0) ans++;
      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...