Solution

很显然, 最优情况肯定是相邻两个相连 。

然后模型就跟 Luogu1484 类似了。

把两个房子 看成一个坑 (参考 Luogu1484), 选取 $k$ 个不相邻的坑, 使得权值最小。

Luogu1484 则是 选取 至多 $k$ 个不相邻坑,  使得权值最大。

先考虑简单问题:

当$k= 1$时, 肯定是选择 最大 的$a[i]$

当$k= 2$时, 仅有两种情况  选 最大的 $a[i]$ 和 不相邻的 $a[j]$ 或者 $a[i+1]+a[i-1]$

   我们先选了最大的$a[i]$

   那么怎么样才能让下一个找到的最大的 $a[j]$ 是满足条件的解呢?

  我们把 $a[i - 1]$ 和 $a[i + 1]$ 删去, 然后把 $a[i]$改为 $a[i + 1] + a[i - 1] - a[i]$,这样就满足了肯定不会 单独选到 $a[i + 1]或a[i-1]$。

  并且我们若想要选$a[i+1]和a[i-1]$且不选$a[i]$ 只需要再选一次$a[i]$即可。

在$k$更大的情况下同样适用。

然后就用链表存储 $nxt$ 与 $pre$, $Set$ 维护 最大值/ 最小值。

Code

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#define rd read()
#define ll long long
using namespace std;
typedef pair<ll, int> P; const int N = 1e5 + ;
const ll inf = 1e10; int n, k;
int nxt[N], pre[N];
ll a[N], ans;
set<P> st; int read() {
int X = , p = ; char c = getchar();
for (; c > '' || c < ''; c = getchar())
if (c == '-') p = -;
for (; c >= '' && c <= ''; c = getchar())
X = X * + c - '';
return X * p;
} void del(int x) {
nxt[pre[x]] = nxt[x];
pre[nxt[x]] = pre[x];
} int main()
{
n = rd; k = rd;
for (int i = ; i <= n; ++i)
a[i] = rd;
n--;
for (int i = ; i <= n; ++i)
a[i] = a[i + ] - a[i];
for (int i = ; i <= n; ++i)
nxt[i] = i + , pre[i] = i - ;
for (int i = ; i <= n; ++i)
st.insert(P(a[i], i));
a[] = a[n + ] = inf;
set<P> :: iterator it;
for (; k; --k) {
it = st.begin();
P tp = *it;
int x = tp.second; ll y = a[x];
ll t = a[pre[x]] + a[nxt[x]] - y;
a[x] = t; ans += y;
st.insert(P(t, x));
st.erase(P(y, x));
if (pre[x])
st.erase(P(a[pre[x]], pre[x])), del(pre[x]);
if (nxt[x] && nxt[x] != n + )
st.erase(P(a[nxt[x]], nxt[x])), del(nxt[x]);
}
printf("%lld\n", ans);
}

Luogu 3620 数据备份 - Set的更多相关文章

  1. 数据备份的OSS接口

    最近在做一个新的项目,从RDS备份到OSS,进行数据备份以及后续的还原.这边对阿里云的OSS数据上传接口进行说明,先做下笔记先简单介绍下OSS: ①Object 在OSS中,用户操作的基本数据单元是O ...

  2. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  3. redis主从复制 从而 数据备份和读写分离

    蜗牛Redis系列文章目录http://www.cnblogs.com/tdws/tag/NoSql/ 爬虫转载注明地址本文地址—博客园蜗牛 http://www.cnblogs.com/tdws/p ...

  4. MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  5. 转 MySQL 数据备份与还原

    MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html   一.数据备份 1.使用mysqldump命令备份 mysqldum ...

  6. Linux文件系统应用---系统数据备份和迁移(用户角度)

    1   前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的  “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文 ...

  7. 开源服务专题之-------rsync数据备份

    RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...

  8. Oracle数据备份bat

    @echo on setlocal rem 设置数据库和备份文件参数... set sid=testorcl set username=testname set password=testpwd se ...

  9. Bzoj1150 数据备份Backup

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

随机推荐

  1. Java的学习02

    今天依旧记录一下今天的学习的知识. /** * 测试StringBuilder StringBuffer,可变字符序列 * String对象称为“不可变对象"指的是对象内部成员变量的值无法再 ...

  2. 1.3.1、CDH 搭建Hadoop在安装之前(端口---Cloudera Manager和Cloudera Navigator使用的端口)

    下图概述了Cloudera Manager,Cloudera Navigator和Cloudera Management Service角色使用的一些端口: Cloudera Manager和Clou ...

  3. burpsuite的使用(三)

    send to repeater 手动提交,注入. 将post请求改成get请求 直接就可以看到页面 生成csrf POC代码 点击在浏览器中测试,copy 拿到浏览器里访问 或者拷贝出来 保存到文本 ...

  4. Jmeter(二十五)常见问题(转载)

    转载自 http://www.cnblogs.com/yangxia-test 收集工作中JMeter遇到的各种问题   1.  JMeter的工作原理是什么? 向服务器提交请求:从服务器取回请求返回 ...

  5. lucene笔记

    lucene全文检索 全文检索是计算机程序通过扫描文章中的每一个词, 对每一个词建立一个索引, 指明该词在文章中出现的次数和位置. 当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程

  6. 【scrapy】其他问题2

    今天爬取豆瓣电影的是时候,出现了两个问题: 1.数据无法爬取并输出Retrying <GET https://movie.douban.com/robots.txt> 看起来像是被拦截了. ...

  7. Java读取文件时第一行出现乱码“?”问号

    我们在使用Java在读取文件(txt.dat等)时,如果文件不是utf-8格式的话,读取结果会出现,中文字符变乱码的情况,所以一般在读取时转为UTF-8格式读取. 但这时会出现一种情况,第一次读取第一 ...

  8. 三:python 对象类型详解一:数字(上)

    一:python 的数字类型: a)整数和浮点数 b)复数 c)固定精度的十进制数 d)有理分数 e)集合 f)布尔类型 g)无穷的整数精度 h)各种数字内置函数和模块 二:各种数字类型的详解 1,数 ...

  9. MySQL之多表查询练习 与基本查询基础

    MySQL  增删查改 一.增:有2种方法 1.使用insert插入单行数据: 语法:insert [into]<表名> [列名] values <列值> 例:insert i ...

  10. Codeforces Beta Round #67 (Div. 2)

    Codeforces Beta Round #67 (Div. 2) http://codeforces.com/contest/75 A #include<bits/stdc++.h> ...