Submission #1280965

#TimeUsernameProblemLanguageResultExecution timeMemory
1280965trideserSki 2 (JOI24_ski2)C++20
0 / 100
6 ms2360 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main() {
	ll N, K;
	cin >> N >> K;
	if(K < 100000) return 1;
	vector<pair<ll, ll>> ver(N);
	for(ll i = 0; i < N; i++) {
		ll a, b;
		cin >> a >> b;
		ver[i] = make_pair(a, b);
	}
	sort(ver.begin(), ver.end());
	ll ret = 0;
	for(ll i = 1; i < N && ver[i].first == 0; i++) {
		ver[i].first = 1;
		ret += 100000;
	}
	ll nx_free = 0;
	ll mn = ver[0].second;
	ll nx_mn = 0x7fffffff;
	multiset<ll> free;
	vector<ll> minprice(301, 0x7fffffff);
	for(pair<ll, ll> p : ver) {
		for(ll i = p.first + 1; i < 301; i++) {
			free.insert(i);
			minprice[i] = min(minprice[i], p.second);
		}
	}
	vector<pair<ll, ll>> v;
	for(pair<ll, ll> p : ver) {
		v.push_back(make_pair(-p.second, p.first));
	}
	sort(v.begin(), v.end());
	for(pair<ll, ll> p : v) {
		if(p.second == 0) continue;
		if(free.upper_bound(p.second) != free.begin()) {
			free.erase(--free.upper_bound(p.second));
		}
		else {
			ret += minprice[p.second];
		}
	}

	cout << ret;
	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...