제출 #132359

#제출 시각아이디문제언어결과실행 시간메모리
132359bogdan10bosStrange Device (APIO19_strange_device)C++14
35 / 100
2806 ms18192 KiB
/// Just for others, not for me :( 9 days and counting
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<LL, LL> pii;

LL A, B;

int main()
{
	//freopen("1.in", "r", stdin);

	int T;
	cin >> T >> A >> B;

	LL d = __gcd(A, B + 1);
	LL K = A / d;
	K *= B;

	vector<pii> itvs;
	for(int i = 1; i <= T; i++)
	{
		LL st, dr;
		cin >> st >> dr;
		if(dr - st + 1 >= K)
		{
			cout << K << '\n';
			exit(0);
		}
		st %= K, dr %= K;
		if(st <= dr)
			itvs.push_back({st, dr});
		else
		{
			itvs.push_back({st, K - 1});
			itvs.push_back({0, dr});
		}
	}

	sort(itvs.begin(), itvs.end(),
		[](pii a, pii b)
		{
			if(a.second == b.second)	return a.first < b.first;
			return a.second < b.second;
		});

	LL ans = 0;
	while(!itvs.empty())
	{
		pii itv = itvs.back();
		itvs.pop_back();
		while(!itvs.empty())
		{
			if(itvs.back().second >= itv.first)
			{
				pii itv2 = itvs.back();
				itvs.pop_back();
				itv.first = min(itv.first, itv2.first);
			}
			else
				break;
		}

		ans += itv.second - itv.first + 1;
	}

	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...