E求调
  • 板块学术版
  • 楼主___A__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/16 21:41
  • 上次更新2024/3/16 22:10:35
查看原帖
E求调
275860
___A__楼主2024/3/16 21:41
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,m,a[N],ans,v[N],del[N];
vector<pair<int,int>>vec;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>v[i];
	}
	for(int i=1;i<=n;i++){
		int tmp=i,num=v[i];
		while(a[i]==a[i+1]){
			i++,num=max(num,v[i]);
		}
		ans+=num,vec.push_back(pair<int,int>{num,i}),m-=(i-tmp);
	}
	if(m<0){
		cout<<-1;
	}
	else{
		if(m){
			for(int i=1;i+1<vec.size();i++){
				if(a[vec[i-1].second]==a[vec[i+1].second]){
					del[vec[i].second]=1;
				}
			}
			sort(vec.begin(),vec.end());
			for(auto [num,idx]:vec){
				if(!del[idx]){
					m--,ans-=num;
					if(!m){
						break;
					}
				}
			}
		}
		if(m){
		    cout<<-1;
		    return 0;
		}
		cout<<ans;
	}
}
2024/3/16 21:41
加载中...