#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> a : free) cout << a.first << " " << a.second << "\t";
//cout << "\n";
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 == ver[0].first) continue;
//cout << "s";
if(free.lower_bound(make_pair(p.second, 0ll)) != free.begin()) {
free.erase(--free.lower_bound(make_pair(p.second, 0ll)));
}
else {
ret += (--minprice.lower_bound(p.second))->second;
}
//for(pair<ll, ll> a : free) cout << a.first << " " << a.second << "\t";
//cout << "\n";
}
cout << ret;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |