Submission #1281346

#TimeUsernameProblemLanguageResultExecution timeMemory
1281346arashmemarRemittance (JOI19_remittance)C++20
55 / 100
1100 ms86596 KiB
#include <bits/stdc++.h>
using namespace std;

const long long int maxn = 1e6 + 100;

set <pair <long long int, long long int>> s;
long long int a[maxn], b[maxn], d[maxn], n;

void push(long long int i)
{
	long long int cur = d[i];
	if (cur != 1)
	{
		cur -= cur % 2;
	}
	else
	{
		if (b[i] == 0)
		{
			cout << "No";
			exit(0);
		}
		cur++;
	}
	s.erase({d[i], i});
	d[i] -= cur;
	s.insert({d[i], i});
	long long int j = i + 1;
	if (j == n + 1)
	{
		j = 1;
	}
	s.erase({d[j], j});
	d[j] += cur / 2;
	s.insert({d[j], j});
	return ;
}

int main()
{
	cin >> n;
	for (long long int i = 1;i <= n;i++)
	{
		cin >> a[i] >> b[i];
		d[i] = a[i] - b[i];
		s.insert({d[i], i});
	}

	while ((*(--s.end())).first > 0)
	{
		push((*(--s.end())).second);
	}
	if ((*s.begin()).first < 0)
	{
		cout << "No";
	}
	else
	{
		cout << "Yes";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...