제출 #1280980

#제출 시각아이디문제언어결과실행 시간메모리
1280980trideserSki 2 (JOI24_ski2)C++20
0 / 100
1 ms572 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 == ver[0].first; i++) {
		ver[i].first++;
		ret += K;
	}
	ll nx_free = 0;
	set<pair<ll, ll>> free;
	map<ll, ll> minprice;
	minprice[-1] = 0x7fffffffffffffff;
	ll xxx = 1;
	for(pair<ll, ll> p : ver) {
		free.insert(make_pair(p.first, xxx++));
		if(minprice.find(p.first) == minprice.end()) minprice[p.first] = 0x7fffffffffffffff;
		minprice[p.first] = min(minprice[p.first], p.second);
	}
	ll mm = 0x7fffffffffffffff;
	for(auto it = minprice.begin(); it != minprice.end(); it++) {
		if(it->second > mm) {
			it = minprice.erase(it);
		}
		mm = min(mm, it->second);
	}
	for(pair<ll, ll> p : ver) {
		if(p.first == ver[0].first) continue;
		if(free.lower_bound(make_pair(p.first, 0ll)) != free.begin()) {
			free.erase(--free.lower_bound(make_pair(p.first, 0ll)));
		}
		else {
			ret += (--minprice.lower_bound(p.first))->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...