Submission #1190439

#TimeUsernameProblemLanguageResultExecution timeMemory
1190439boclobanchatStrange Device (APIO19_strange_device)C++20
100 / 100
440 ms39652 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e6+5;
const long long INF=1e18+9;
long long val[MAXN],L[MAXN],R[MAXN];
int pref[MAXN];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	long long n,a,b;
	cin>>n>>a>>b;
	int cnt=0;
	long long k=a/__gcd(a,b+1),range=INF;
	if(INF/k>=b) range=b*k;
	val[++cnt]=0,val[++cnt]=range;
	for(int i=1;i<=n;i++)
	{
		long long l,r;
		cin>>l>>r;
		val[++cnt]=l%range,val[++cnt]=r%range+1;
		L[i]=l,R[i]=r;
	}
	sort(val+1,val+cnt+1);
	for(int i=1;i<=n;i++)
	{
		long long l=L[i],r=R[i];
		long long a=l/range,b=r/range;
		if(a==b)
		{
			pref[lower_bound(val+1,val+cnt+1,l%range)-val]++;
			pref[lower_bound(val+1,val+cnt+1,r%range+1)-val]--;
		}
		else
		{
			if(a+2<=b) return cout<<range,0;
			pref[lower_bound(val+1,val+cnt+1,l%range)-val]++;
			pref[lower_bound(val+1,val+cnt+1,r%range+1)-val]--;
			pref[1]++,pref[cnt]--;
		}
	}
	long long ans=0;
	for(int i=1;i<cnt;i++) ans+=((pref[i]+=pref[i-1])>0)*(val[i+1]-val[i]);
	cout<<ans;
}
#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...