3 Star 60 Fork 5

programmercarl / kamacoder-solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0075.整数删除.md 1.12 KB
一键复制 编辑 原始数据 按行查看 历史
huanheart 提交于 2024-02-28 17:14 . Update 0075.整数删除.md

75. 整数删除

题目链接

C

C++

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,k;
priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>q;
int pre[N],ne[N];
long long cnt[N],a[N],t;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%lld",&t);
		q.push({t,i});
		pre[i]=i-1;
		ne[i]=i+1;
	}
	while(q.size()>n-k){
		long long x=q.top().first; //当前的值
		int id=q.top().second; //当前的下标
		q.pop();
		if(cnt[id]){		
			q.push({x+cnt[id],id});
			cnt[id]=0; //这步很细节,保证了后面的元素被删除之后又可以加到这里
		}
		else{
			int left=pre[id],right=ne[id];
			cnt[left]+=x;
			cnt[right]+=x;
			ne[left]=right; //保证了左边右边隔断
			pre[right]=left;
		}
	}
	while(q.size()){
		long long x=q.top().first;
		int id=q.top().second; //表示剩下数字对应的下标
		q.pop();
		a[id]=x+cnt[id]; //加上它本应该要加上的内容
	}
	for(int i=1;i<=n;i++){
		if(a[i]) cout<<a[i]<<" ";
	}
	return 0;
} 

Java

Python

JS

Go

1
https://gitee.com/programmercarl/kamacoder-solutions.git
git@gitee.com:programmercarl/kamacoder-solutions.git
programmercarl
kamacoder-solutions
kamacoder-solutions
main

搜索帮助