Submission #546363

#TimeUsernameProblemLanguageResultExecution timeMemory
546363blueHotel (CEOI11_hot)C++17
100 / 100
1082 ms63096 KiB
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

using ll = long long;
using vll = vector<ll>;
using pll = pair<ll, ll>;
#define sz(x) int(x.size())

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int n, m, o;
	cin >> n >> m >> o;

	multiset<pll> rooms; //(capacity, upkeep)

	for(int i = 1; i <= n; i++)
	{
		ll c, p;
		cin >> c >> p;

		rooms.insert({p, c});
	}

	vector<pll> offers(m); //(capacity requirement = first, gain = second)
	for(int j = 0; j < m; j++)
	{
		cin >> offers[j].second >> offers[j].first;
	}

	sort(offers.begin(), offers.end(), [] (pll U, pll V)
	{
		return U.second > V.second;
	});

	ll res = 0;

	vector<ll> options;



	for(pll z : offers)
	{
		// cerr << "offer = " << z.first << ' ' << z.second << '\n';

		ll capreq = z.first;
		ll gain = z.second;

		auto f = rooms.lower_bound({capreq, -1});

		if(f == rooms.end()) continue;

		if(gain > f->second)
		{
			options.push_back(gain - f->second);
		}
		
		rooms.erase(f);
	}

	sort(options.begin(), options.end());

	for(int i = sz(options)-1; i >= 0 && i >= sz(options)-o; i--)
		res += options[i];

	cout << res << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...