BZOJ1367——[Baltic2004]sequence
1、题目大意:给一个序列t,然后求一个序列z,使得$|z1-t1|+|z2-t2|+...+|zn-tn|$的值最小,我们只需要求出这个值就可以了,并且z序列是递增的
2、分析:这道题z序列是递增的,不好做啊,我们想让z序列变成不降的,可以将t数组进行改变,就是t[i]-=i。不降的就好做多了,我们可以让一段下降的t序列对应的z序列全是中位数。但是我们还要维护z序列是单调的,于是我们从头扫,用一个单调栈,对于每一个t,先压进栈,如果栈顶元素的中位数比栈的第二个元素要小,就把栈顶和第二个元素合并,维护中位数。最后用这个栈中的元素算出z序列,最后就是求值了
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 1100000
#define LL long long
struct merge_heap{
int l[M], r[M], d[M], value[M];
void init(){
memset(l, 0, sizeof(r));
memset(r, 0, sizeof(r));
memset(d, 1, sizeof(d));
}
int merge(int x, int y){
if(!x) return y;
if(!y) return x;
if(value[x] < value[y]) swap(x, y);
r[x] = merge(r[x], y);
if(d[l[x]] < d[r[x]]){
swap(l[x], r[x]);
}
d[x] = d[l[x]] + 1;
return x;
}
} wt;
int L[M], R[M], tree[M], Size[M], Top = 0, t[M], z[M];
int main(){
wt.init();
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i ++) scanf("%d", &t[i]);
for(int i = 1; i <= n; i ++) t[i] -= i;
for(int i = 1; i <= n; i ++){
wt.value[i] = t[i];
tree[++ Top] = i;
L[Top] = R[Top] = i;
Size[Top] = 1;
while(Top > 1 && wt.value[tree[Top]] <= wt.value[tree[Top - 1]]){
R[Top - 1] = R[Top];
Size[Top - 1] += Size[Top];
tree[Top - 1] = wt.merge(tree[Top - 1], tree[Top]);
Top --;
int len = R[Top] - L[Top] + 1;
if(len % 2 == 0){
len /= 2;
}
else{
len = len / 2 + 1;
}
while(Size[Top] > len){
Size[Top] --;
tree[Top] = wt.merge(wt.l[tree[Top]], wt.r[tree[Top]]);
}
}
}
for(int i = 1; i <= Top; i ++){
for(int j = L[i]; j <= R[i]; j ++){
z[j] = wt.value[tree[i]];
}
}
LL ans = 0;
for(int i = 1; i <= n; i ++){
ans += (LL)(abs(z[i] - t[i]));
}
printf("%lld\n", ans);
return 0;
}
BZOJ1367——[Baltic2004]sequence的更多相关文章
- BZOJ1367 [Baltic2004]sequence 堆 左偏树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1367 题意概括 Description Input Output 一个整数R 题解 http:// ...
- BZOJ1367 [Baltic2004]sequence 【左偏树】
题目链接 BZOJ1367 题解 又是一道神题,, 我们考虑一些简单的情况: 我们先假设\(b_i\)单调不降,而不是递增 对于递增序列\(\{a_i\}\),显然答案\(\{b_i\}\)满足\(b ...
- BZOJ1367 [Baltic2004]sequence
现学的左偏树...这可是道可并堆的好题目. 首先我们考虑z不减的情况: 我们发现对于一个区间[l, r],里面是递增的,则对于此区间最优解为z[i] = t[i]: 如果里面是递减的,z[l] = z ...
- 可并堆试水--BZOJ1367: [Baltic2004]sequence
n<=1e6个数,把他们修改成递增序列需把每个数增加或减少的总量最小是多少? 方法一:可以证明最后修改的每个数一定是原序列中的数!于是$n^2$DP(逃) 方法二:把$A_i$改成$A_i-i$ ...
- BZOJ1367: [Baltic2004]sequence(左偏树)
Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 解题思路: 有趣的数学题. 首先确定序 ...
- bzoj1367 [Baltic2004]sequence 左偏树+贪心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1367 题解 先考虑条件为要求不下降序列(不是递增)的情况. 那么考虑一段数值相同的子段,这一段 ...
- 【BZOJ1367】[Baltic2004]sequence 左偏树
[BZOJ1367][Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sampl ...
- 【bzoj1367】[Baltic2004]sequence
2016-05-31 17:31:26 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1367 题解:http://www.cnblogs.co ...
- 【BZOJ-1367】sequence 可并堆+中位数
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 932 Solved: 348[Submit][S ...
随机推荐
- JavaWeb---总结(一)JavaWeb开发入门
一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...
- angularjs中$watch监听model(对象属性、对象)变化
昨天看了一下教学视频,学到了有关$watch的用法,想到最近做的一个页面中有个select下拉选项(select中的值变化了,则后面input中的值也跟着相应的变化),不知是否可以使用$watch来代 ...
- 常用的工具类4-IP类
public static class IpHelper { /// <summary> /// 获取Ip /// </summary> /// <returns> ...
- C#------EntityFramework实体加载数据库SQLServer(MySQL)
一.SQLServer数据库创建表Company,包含ID,CName,IsEnabled三列 二.(1)VS新建一个DXApplication工程,名为CompanyManageSystem (2) ...
- 初学Memcached安装及使用(CentOS7)
1.yum install memcached安装memecached 2.chkconfig memcached on设置memcached开机启动 3.service memcached star ...
- Java数据库——JDBC 2.0操作
可滚动的结果集 让结果集滚动起来 //================================================= // File Name : JDBC20_demo //-- ...
- HTML学习笔记——head、body及简单标签
1> title标签.网站关键词.网站描述.实现百度网的跳转 2> 单标签.对标签.p标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
- Java 组播
MulticastSocketServer.java package cn.edu.buaa.multicast; import java.io.IOException; import java.ne ...
- wordpress后台404页面
就在刚刚,boss需要看公司网站后台,网站是用wordpress搭的,发现全是404,蛋疼,于是google,下面是解决办法: location / { if (-f $request_filenam ...
- php字符串常用算法--字符串加密解密
/** * 加密.解密字符串 * * @global string $db_hash * @global array $pwServer * @param $string 待处理字符串 * @para ...