Submission #252085

#TimeUsernameProblemLanguageResultExecution timeMemory
252085jeqchoStrange Device (APIO19_strange_device)C++17
100 / 100
1146 ms148336 KiB
#include<iostream> #include<cstdio> #include<algorithm> #include<set> using namespace std; #define ll long long #define MAX 1000100 inline ll read() { ll x=0;bool t=false;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=true,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return t?-x:x; } ll n,sum,l[MAX],r[MAX],A,B,d,T,ans; multiset<pair<ll,int> >S; #define mp make_pair void Add(ll l,ll r){S.insert(mp(l,1));S.insert(mp(r+1,-1));} int main() { n=read();A=read();B=read();d=__gcd(A,B+1); for(int i=1;i<=n;++i)l[i]=read(),r[i]=read(),sum+=r[i]-l[i]+1; if(1.0*A*B/d>1e18){printf("%lld\n",sum);return 0;} T=A/d*B; for(int i=1;i<=n;++i) { if(r[i]-l[i]+1>=T){printf("%lld\n",T);return 0;} if(l[i]/T!=r[i]/T)Add(l[i]%T,T-1),Add(0,r[i]%T); else Add(l[i]%T,r[i]%T); } S.insert(mp(T,0)); ll lst=-1,c=0; for(auto a:S) { if(c>0)ans+=a.first-lst; c+=a.second; lst=a.first; } printf("%lld\n",ans); 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...