【codevs 1615】数据备份
2017-11-05 21:05
141 查看
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #define ll long long using namespace std; struct zt { int ct;//区间的序号 ll l;//区间内选择的长度 }; bool operator <(zt a,zt b) { return a.l>b.l; } priority_queue<zt>q; const int maxn=1000000+5; int nxt[maxn],pre[maxn],a[maxn],cnt,tmpre,tmnxt,n,k,tot; ll len[maxn],ans; bool del[maxn]; int main() { memset(del,0,sizeof(del)); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); for(int i=1;i<n;i++) { len[i]=a[i+1]-a[i]; pre[i]=i-1; nxt[i]=i+1; q.push((zt){i,len[i]}); } cnt=n-1; len[0]=len =1e12; cnt++; while(!q.empty()) { zt u=q.top(); q.pop(); if(!del[u.ct])//可以选 { tot++;//区间数 ans+=u.l; if(tot==k) { printf("%lld",ans); return 0; } tmpre=pre[u.ct],tmnxt=nxt[u.ct]; u.l=-u.l+len[tmpre]+len[tmnxt];//当前区间内的答案 nxt[pre[tmpre]]=++cnt; nxt[cnt]=nxt[tmnxt]; pre[nxt[tmnxt]]=cnt; pre[cnt]=pre[tmpre]; len[cnt]=u.l;//当前区间内的答案 del[tmpre]=del[tmnxt]=del[u.ct]=1 4000 ;//不可以选 u.ct=cnt; q.push(u); } } }
相关文章推荐
- CodeVs 1615 数据备份
- 【codevs 1615】数据备份
- Codevs1615数据备份
- [codevs1615]数据备份
- Redis学习——Redis持久化之RDB备份方式保存数据
- MySQL 查看/备份/导入/导出/结构或数据
- Ubuntu数据备份
- mysql 数据备份与恢复
- linux mysql 数据按表名称备份
- mysqldump 常用备份选项,只备份数据或结构的方法
- 【随记】SQL备份一张表的数据
- android 数据备份
- 5.非关系型数据库(Nosql)之mongodb:创建集合,备份与导入导出, 数据还原,导入导出
- mysql命令备份数据
- 在Centos5.9下通过rsync+inotify实现数据的实时备份
- mysql数据备份
- mysql 备份与迁移 数据同步方法
- Redis 数据备份与恢复
- 数据库备份数据
- mysqldump导出数据备份 --set-gtid-purged=OFF