首先肯定要选择相邻的公司配对才会距离最小

先把两两之间的距离加入小根堆中
每次取出堆顶,加入答案,删掉左右线段,再扔进去len[l]+len[r]-len[now]
这样如果这个新点被取到,说明取两边而不取中间
做K次,贪心就是正确的了
/**************************************************************Problem: 1150User: momokaLanguage: C++Result: AcceptedTime:620 msMemory:6000 kb
****************************************************************/#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;++i)
#define drep(i,t,s) for(int i=t;i>=s;--i)
#define inf 0x3f3f3f3f
using namespace std;
long long ans,val[150010];
int l[150010],r[150010],id,n,k,d[100001];
typedef pair<long long,int>ele;
priority_queue<ele,vector<ele>,greater<ele> >q;
bool mark[150010];
inline int read(){char ch=getchar();int f=1,x=0;while(!(ch>='0'&&ch<='9')){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*f;
}
int main(){n=read(); k=read();rep(i,1,n) d[i]=read();rep(i,1,n-1){val[++id]=d[i+1]-d[i];q.push(make_pair(val[id],id));l[id]=id-1;r[id]=id+1;}r[0]=1; val[0]=1LL<<61; //q.push(make_pair(val[0],0));l[id+1]=id; val[id+1]=1LL<<61; // q.push(make_pair(val[id+1],id+1));++id;rep(i,1,k){while (mark[q.top().second]) q.pop();ele now=q.top();q.pop();int idn=now.second;ans+=now.first;int ls=l[idn],rs=r[idn];mark[ls]=1;mark[rs]=1;l[idn]=l[ls]; r[l[idn]]=idn;r[idn]=r[rs]; l[r[idn]]=idn;val[idn]=val[ls]+val[rs]-now.first;q.push(make_pair(val[idn],idn));}printf("%lld\n",ans);return 0;
}

[BZOJ1150][CTSC2007]数据备份Backup相关推荐

  1. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  2. bzoj1150 [CTSC2007]数据备份Backup

    大概就是写了道生日礼物那个不知道叫啥的贪心..... 大概就是说这道题和那个比较像... 所以留着看看吧,哪天想起了回来做这道题咯~ 转载于:https://www.cnblogs.com/LLppd ...

  3. bzoj1150: [CTSC2007]数据备份Backup--贪心+优先队列维护堆

    题目大意:将k对点两两相连,求最小长度 易证得,最优方案中,相连的办公楼一定是取相邻的比取不相邻的要更优 然后就可以用贪心来做这道题了.. 之前向CZL大神学习了用堆来贪心的做法orz 大概思路就是将 ...

  4. [APIO / CTSC2007]数据备份 --- 贪心

    [APIO / CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份. 然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公 ...

  5. P3620-[APIO/CTSC2007]数据备份【贪心,堆,链表】

    正题 题目链接:https://www.luogu.com.cn/problem/P3620 题目大意 一条线上有nnn个位置,选出kkk对使得它们的距离差之和最小. 解题思路 因为一定是连接相邻的最 ...

  6. Right Backup(云端数据备份软件)v8.1官方版

    Right Backup是一款云端数据备份软件,Right Backup为您的数据提供一站式云存储解决方案,在云中备份您的所有文档.照片.音乐和其他重要的资料,在出现不幸的数据丢失时保持安全! 软件特 ...

  7. Android数据备份(Android Data Backup)

    最近我在阅读Android Developer上的文章,本文是对其中一篇Data Backup的翻译.希望可以通过翻译英文技术文章提高自己阅读英文文档的水平,如果有不妥的地方,希望指出,谢谢~因为这个 ...

  8. Android数据存储---数据备份(Data Backup)(三)

    继承BackupAgentHelper类 如果要备份完整的文件(既可以是SharedPreferences文件也可以是内部存储文件),那么就应该使用BackupAgentHelper类来构建备份代理. ...

  9. EaseUS Todo Backup for Mac(mac数据备份软件)

    EaseUS Todo Backup for Mac是一个简单但功能强大的备份软件,可以自行定期备份文件,文件夹和应用程序库,加密和压缩数据以获得存储空间,或克隆整个驱动器.它还可以使文件夹保持同步. ...

最新文章

  1. IntelliJ IDEA快捷键(Shortcut)官方文档地址
  2. 中南大学在线考试答案计算机基础,中南大学《计算机基础》在线考试题库(267题)(有答案).doc...
  3. TP5: 日志记录改造——4
  4. dns服务器v6解析 windows_04:缓存DNS、Split分离解析、电子邮件通信、Web服务器项目实战...
  5. SpringBoot - 日志选择与实现
  6. Struts2学习笔记(四) Action(中)
  7. Ubuntu18.04之man中文版
  8. Python模块的使用
  9. vim中:x和:wq的区别
  10. matlab中 晶闸管整流桥导通角_逆变角如何设置,晶闸管2011-6-6
  11. 怎么用手机测量CAD图纸中的立面面积?
  12. RSA公私钥pkcs1与pkcs8格式的转换
  13. 如何解决Adobe Flash Player已被屏蔽
  14. Landsat 行列号与经纬度在线转换
  15. 飞书:远程办公更轻松
  16. DRAM 内存介绍(一)
  17. 转:石康 不奋斗的姑娘我不爱
  18. 移动端SEO的一些疑问
  19. 以NLP技术为核心,容联云对话式AI平台入选《2022中国对话式AI采购指南》
  20. 利用Python进行数据分析:电子书

热门文章

  1. python对重复数据进行合并求和
  2. 全民享益源码开发中的系统
  3. English trip V2 - 12 Movies and Televison 电影和电视 Teacher:Corrine Key:
  4. 眼内衍射透镜的设计与分析
  5. java对字符串进行加星号处理
  6. SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)漏洞加固指南
  7. 在模型训练前为什么要把数据打包为.npy文件,和普通文件格式有什么区别?
  8. 40个比较实用的Windows系统命令
  9. 51Talk进军AI教育,与腾讯、百度、网易有道等巨头一争高低
  10. html5餐厅模拟经营游戏《新的开始》源码