堆/贪心


  一共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. Web 应用程序项目 MvcApplication1 已配置为使用 IIS。

    今天网上下了一个项目,加载不了,并报如下错误: Web 应用程序项目 MvcApplication1 已配置为使用 IIS. 若要访问本地 IIS 网站,必须在管理员帐户的上下文中运行 Visual ...

  2. Winform TreeView 单选

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { //通过鼠标或者键盘触发事件,防止修改节点的Checke ...

  3. Vue.js学习 Item14 – 过滤器与自定义过滤器

    基础 类似于自定义指令,可以用全局方法 Vue.filter() 注册一个自定义过滤器,它接收两个参数:过滤器 ID 和过滤器函数.过滤器函数以值为参数,返回转换后的值: Vue.filter('re ...

  4. Perl 随机数和随机密码的产生

    Perl有着强大的随机数产生函数rand(),下面的代码详细介绍其应用 #!/usr/bin/perl #  use strict;   use warnings; # 0~1之间    $rando ...

  5. Linux驱动开发之字符设备模板

    /***************************** ** 驱动程序模板* 版本:V1* 使用方法(末行模式下):* :%s/xxx/"你的驱动名称"/g********* ...

  6. LaTeX让公式跟随章节编号

    正常公式编号会是(1)(2)这种,想要编号成(3.1) (3.2)怎么办呢? \usepackage{amsmath} \numberwithin{equation}{section} 在导言区加入以 ...

  7. [原创]pg_shard使用场景及功能测试

    pg_shard是一个PostgreSQL的sharding extension.可以用于Shards.Replicates tables和高可用.它可以在不修改Applications的情况下无缝分 ...

  8. bat文件编写(无线承载网络设置)

    就弄个例子,自己看执行效果,然后模仿写就行. 1)获取当前时间: @echo off set YEAR=%date:~0,4% set MONTH=%date:~5,2% set DAY=%date: ...

  9. java 版本安装

    系统:Ubuntu 10.04 JDK:jdk-6u20-linux-i586.bin 当然,我已经在sun的官方网站上下载好了必要的jdk,由于是在linux下安装,跟平时习惯的windows有所不 ...

  10. Linux I/O总结

    文件流 标准I/O文件流可用于单字节或多字节字符集.流的定向决定了所读写的是单字节还是多字节.流在最初创建时,并没有定向,此时如果在为定向的流上使用多字节I/O函数,那么该流被设置为宽定向的:如果在为 ...