堆/贪心


  一共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的更多相关文章

  1. 【链表】bzoj 1150: [CTSC2007]数据备份Backup

    1150: [CTSC2007]数据备份Backup Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1136  Solved: 458[Submit] ...

  2. [BZOJ 1150] [CTSC2007] 数据备份Backup 【贪心 + 链表】

    题目链接:BZOJ - 1150 题目分析 可以看出,我们选的 k 条边一定是相邻两点之间的线段.我们可以将每条边看成一个点,那么我们就是要在 n-1 个点中选出互不相邻的 k 个,使它们的和最小. ...

  3. bzoj 1150: [CTSC2007]数据备份Backup

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

  4. BZOJ 1150 [CTSC2007]数据备份Backup(贪心+优先队列)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1150 [题目大意] 给出n个数,请你挑出k对(每个数不可重复选取),使得他们差的绝对值 ...

  5. BZOJ 1150 CTSC2007 数据备份Backup 堆+馋

    标题效果:给定一个长度n−1n-1的序列,要求选出kk个不相邻的数使得和最小 费用流显然能跑.并且显然过不去- - 考虑用堆模拟费用流 一个错误的贪心是每次取最小.这样显然过不去例子 我们把[每次取最 ...

  6. bzoj 1150: [CTSC2007]数据备份Backup【链表+堆】

    参考:http://blog.csdn.net/Regina8023/article/details/44158947 神奇的做法.题意相当于若干个数取不相邻的k个使最小.先把数组差分,len表示这段 ...

  7. 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)

    1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...

  8. 1150: [CTSC2007]数据备份Backup

    1150: [CTSC2007]数据备份Backup https://lydsy.com/JudgeOnline/problem.php?id=1150 分析: 堆+贪心. 每次选最小的并一定是最优的 ...

  9. bzoj1150 [CTSC2007]数据备份Backup 双向链表+堆

    [CTSC2007]数据备份Backup Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2727  Solved: 1099[Submit][Stat ...

  10. 【BZOJ1150】[CTSC2007]数据备份Backup 双向链表+堆(模拟费用流)

    [BZOJ1150][CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此 ...

随机推荐

  1. [leetcode]_Palindrome Number

    判断integer是否为回文串(负数全部不为回文串) 思路很直接,提取出integer中的每一位,一头一尾进行比较是否相同. 一次AC , 直接上代码: public boolean isPalind ...

  2. 使用memcached实现tomcat集群session共享

    环境centos6.7,下载安装必要的软件:yum -y install epel-release(tomcat7在此源上,tomcat7是现在主流版本) yum -y install tomcat ...

  3. ThinkPHP之中利用commom被继承控制器控制访问每一个控制器方法都需要验证是否已经登录!

    防止 <?php namespace Home\Controller; use Think\Controller; class CommonController extends Controll ...

  4. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  5. php 递归 适合刚刚接解递归的人看

    递归,就是自己调用自己,当满足某条件时层层退出(后进先出). --------------------------------------------------------------------- ...

  6. 搭通自己的电脑与GitHub的传输通道

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

  7. CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

    firewall:systemctl start firewalld.service#启动firewallsystemctl stop firewalld.service#停止firewallsyst ...

  8. Delphi 泛型对象类

    { 很早就写了. 只针对delphixe 以上的版本可用. 希望不是自己在造轮子. } 1 unit U_ClassUtility; interface uses generics.defaults, ...

  9. 内存详解--理解 JVM 如何使用 AIX 上的本机内存

    转自---http://www.ibm.com/developerworks/cn/java/j-nativememory-aix/

  10. 问题记录:android.os.NetworkOnMainThreadException异常

    在MainActivity的主线程中访问网络将会发生异常 查阅资料后发现 Android4.0 以后不允许在主线程进行网络连接