#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, k;
ll a[1000015], b[1000015];
ll c[1000015], d[1000015];
ll q[1000015], num[1000015];
ll m[1000015];
ll cnt;
struct sss {
ll vol, to;
} aa[1000015];
bool cmp(sss a, sss b) {
return a.vol<b.vol;
}
ll aaa[1000015];
ll s;
ll answer;
ll asdf;
int main() {
cin>>n>>k;
for(ll i=1; i<=n; i++) {
cin>>a[i]>>b[i];
if(a[i]==a[i-1]) {
d[cnt]=i;
num[cnt]+=b[i];
m[cnt]=max(m[cnt],b[i]);
q[cnt]=num[cnt]-m[cnt];
} else {
cnt++;
c[cnt]=d[cnt]=i;
m[cnt]=b[i];
num[cnt]+=b[i];
}
}
if(n-cnt>k) {
cout<<"-1";
return 0;
} else {
for(ll i=1; i<=cnt; i++) {
for(ll j=c[i]; j<=d[i]; j++) {
if(b[j]==m[i]) {
s++;
aa[s].vol=b[j];
aa[s].to=s;
aaa[s]=a[j];
answer+=b[j];
// cout<<"sdf "<<a[j]<<" "<<b[j]<<'\n';
break;
}
}
}
sort(aa+1, aa+s+1, cmp);
// for(ll i=1; i<=s; i++) cout<<aa[i].vol<<" "<<aa[i].to<<'\n';
// cout<<"sdfsdfsd "<<asdf<<" "<<k-(n-cnt)<<'\n';
for(ll i=1; asdf<=k-(n-cnt)-1 and i<=s; i++) {
// cout<<"i: "<<i<<" "<<aa[i].to-1<<" "<<aa[i].to+1<<" "<<aaa[aa[i].to-1]<<" "<<aaa[aa[i].to+1]<<'\n';
if(aaa[aa[i].to-1]!=aaa[aa[i].to+1]) answer-=aa[i].vol, asdf++;
}
// cout<<"sdfsdfsd s "<<asdf<<" "<<k-(n-cnt)<<'\n';
if(asdf!=k-(n-cnt)) cout<<"-1";
else cout<<answer;
}
return 0;
}
自己造的样例都过了,就是WA了三个点QDQ,谢谢大佬们