【BZOJ】【1150】【CTSC2007】数据备份Backup
堆/贪心
一共N-1个元素……用堆维护最大值,取了第x个元素以后,插入v[x-1]+v[x+1]-v[x]这个元素,如果再取这个新元素就表示不取x,而取x-1和x+1……大概就是这种“带反悔”的思路吧……
已经不会写堆了TAT,膜拜了lyd神犇
/**************************************************************
Problem: 1150
User: Tunix
Language: C++
Result: Accepted
Time:428 ms
Memory:3224 kb
****************************************************************/ //BZOJ 1000
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
typedef long long LL;
const int N=,INF=~0u>>;
/*******************tamplate********************/
int f[N],a[N],pre[N],next[N],v[N];
int n,m,ans,p;
void up(int p){
while(p>)
if(a[f[p]]<a[f[p>>]]){
swap(f[p],f[p>>]);
swap(v[f[p]],v[f[p>>]]);
p>>=;
}
else break;
}
void down(int l,int r){
int t=l<<;
while(t<=r){
if (t<r && a[f[t]]>a[f[t+]]) t++;
if (a[f[l]]>a[f[t]]){
swap(f[l],f[t]);
swap(v[f[l]],v[f[t]]);
l=t,t=l<<;
}
else break;
}
}
void insert(int x){
f[++p]=x; v[x]=p;
up(p);
}
void erase(int x){
f[v[x]]=f[p]; v[f[p]]=v[x]; p--;
up(v[x]); down(v[x],p);
}
int main(){
n=getint(); m=getint();
F(i,,n) a[i]=getint();
F(i,,n-){
a[i]=a[i+]-a[i],next[i]=i+,pre[i+]=i;
insert(i);
}
F(i,,m){
int x=f[]; ans+=a[x];
if(pre[x]== && next[x]==n) break;
if(pre[x]==){
erase(x),erase(next[x]);
pre[next[next[x]]]=;
}else if(next[x]==n){
erase(x),erase(pre[x]);
next[pre[pre[x]]]=n;
}else{
erase(x),erase(pre[x]),erase(next[x]);
a[x]=a[pre[x]]+a[next[x]]-a[x];
insert(x);
pre[x]=pre[pre[x]]; next[pre[x]]=x;
next[x]=next[next[x]]; pre[next[x]]=x;
}
}
printf("%d\n",ans);
return ;
}
【BZOJ】【1150】【CTSC2007】数据备份Backup的更多相关文章
- 【链表】bzoj 1150: [CTSC2007]数据备份Backup
1150: [CTSC2007]数据备份Backup Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1136 Solved: 458[Submit] ...
- [BZOJ 1150] [CTSC2007] 数据备份Backup 【贪心 + 链表】
题目链接:BZOJ - 1150 题目分析 可以看出,我们选的 k 条边一定是相邻两点之间的线段.我们可以将每条边看成一个点,那么我们就是要在 n-1 个点中选出互不相邻的 k 个,使它们的和最小. ...
- bzoj 1150: [CTSC2007]数据备份Backup
Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家 ...
- BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1150 [题目大意] 给出n个数,请你挑出k对(每个数不可重复选取),使得他们差的绝对值 ...
- BZOJ 1150 CTSC2007 数据备份Backup 堆+馋
标题效果:给定一个长度n−1n-1的序列,要求选出kk个不相邻的数使得和最小 费用流显然能跑.并且显然过不去- - 考虑用堆模拟费用流 一个错误的贪心是每次取最小.这样显然过不去例子 我们把[每次取最 ...
- bzoj 1150: [CTSC2007]数据备份Backup【链表+堆】
参考:http://blog.csdn.net/Regina8023/article/details/44158947 神奇的做法.题意相当于若干个数取不相邻的k个使最小.先把数组差分,len表示这段 ...
- 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)
1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...
- 1150: [CTSC2007]数据备份Backup
1150: [CTSC2007]数据备份Backup https://lydsy.com/JudgeOnline/problem.php?id=1150 分析: 堆+贪心. 每次选最小的并一定是最优的 ...
- bzoj1150 [CTSC2007]数据备份Backup 双向链表+堆
[CTSC2007]数据备份Backup Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2727 Solved: 1099[Submit][Stat ...
- 【BZOJ1150】[CTSC2007]数据备份Backup 双向链表+堆(模拟费用流)
[BZOJ1150][CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此 ...
随机推荐
- 13)Java static
1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是: ...
- Java中的类加载器----ClassLoader
1.简单的讲类加载器就是加载类. 在一个类要被执行时,首先会被从硬盘中加载到内存中,这个任务就是由类加载器来完成,如果加载不成功时,类是无法被执行的.类加载器执行的都是字节码二进制文件. 帮助文档 ...
- ajax使用。
<script> function createAjax(){ var request=false; //window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE ...
- devexpress 控制面板汉化方式 参考信息
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Python基础 第二天
1.http://www.cnblogs.com/beer/p/5672678.html requests和beautifulsoup
- SQL Server 基础:Join用法
Join(麻蛋 废话不多说 有图有真相) 测试数据脚本 CREATE TABLE Atable ( S# INT, Sname ), Sage INT, Sfrom ) ) insert into ...
- Python脚本控制的WebDriver 常用操作 <十> 层级定位
下面将使用WebDriver来模拟操作一个层级定位元素的操作 测试用例场景 在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个.由于属性基本相当,所 ...
- m3u8
audo apt-get install pkg-configsudo apt-get install automake autoconf m4 libtool sudo apt-get instal ...
- JTable的DefaultModel方法getValueAt(a,row)
行和列都是从0开始索引的,而且不包括netbeans生成的表格头,而是从数据开始,否则就会报错
- ViewSwitcher使用范例
一.简介 ViewSwitcher适用于两个视图带动画效果的切换.这里实现两个视图切换的功能,并附带滑屏效果. 二.截图 二.范例代码 带动画效果的切换视图一和视图二. xml <ViewSwi ...