题解:

和bzoj1367差不多

然后a[i]-i不用加

然后我再另一个地方加了这句话

然后poj ac,bzoj wa

poj数据水啊

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
long long ans,ans1,ans2;
int rt[N],cnt,r[N],c[N][],dist[N],val[N],tot,size[N],n,a[N],l[N];
int merge(int x,int y)
{
if (!x||!y)return x+y;
if (val[x]<val[y])swap(x,y);
c[x][]=merge(c[x][],y);
size[x]=size[c[x][]]+size[c[x][]]+;
if (dist[c[x][]]<dist[c[x][]])swap(c[x][],c[x][]);
dist[x]=dist[c[x][]]+;
return x;
}
void pop(int &x){x=merge(c[x][],c[x][]);}
int newnode(int x)
{
val[++tot]=x;
size[tot]=;
c[tot][]=c[tot][]=dist[tot]=;
return tot;
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)scanf("%d",&a[i]);
for (int i=;i<=n;i++)
{
rt[++cnt]=newnode(a[i]);
l[cnt]=r[cnt]=i;
while (cnt>&&val[rt[cnt-]]>val[rt[cnt]])
{
cnt--;
rt[cnt]=merge(rt[cnt],rt[cnt+]);
r[cnt]=r[cnt+];
while (size[rt[cnt]]*>r[cnt]-l[cnt]+)pop(rt[cnt]);
}
}
for (int i=;i<=cnt;i++)
{
int t=val[rt[i]];
for (int j=l[i];j<=r[i];j++)
ans1+=abs(t-a[j]);
}
ans=ans1;
memset(val,,sizeof val);
memset(rt,,sizeof rt);
memset(c,,sizeof c);
memset(dist,,sizeof dist);
memset(l,,sizeof l);
memset(r,,sizeof r);
memset(size,,sizeof size);
tot=cnt=;
for (int i=;i<=n/;i++)swap(a[i],a[n-i+]);
for (int i=;i<=n;i++)
{
rt[++cnt]=newnode(a[i]);
l[cnt]=r[cnt]=i;
while (cnt>&&val[rt[cnt-]]>val[rt[cnt]])
{
cnt--;
rt[cnt]=merge(rt[cnt],rt[cnt+]);
r[cnt]=r[cnt+];
while (size[rt[cnt]]*>r[cnt]-l[cnt]+)pop(rt[cnt]);
}
}
for (int i=;i<=cnt;i++)
{
int t=val[rt[i]];
for (int j=l[i];j<=r[i];j++)
ans2+=abs(t-a[j]);
}
ans=min(ans,ans2);
printf("%lld",ans);
}

poj3666&&bzoj1592的更多相关文章

  1. BZOJ1592 POJ3666 [Usaco2008 Feb]Making the Grade 路面修整 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3666 题目传送门 - BZOJ1592 题意概括 整条路被分成了N段,N个整数A_1, ... , ...

  2. [bzoj1592] Making the Grade

    [bzoj1592] Making the Grade 题目 FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能 ...

  3. POJ3666 线性dp_离散化_贪心

    POJ3666 线性dp_离散化_贪心 就DP而言这个题不算难,但是难就难在贪心,还有离散化的思想上 题目大意:n个土堆,问你最少移动多少单位的图,可以使得这n个土堆变成单调的 dp[i][j]表示前 ...

  4. POJ3666 Making the Grade

    POJ3666 Making the Grade 题意: 给定一个长度为n的序列A,构造一个长度为n的序列B,满足b非严格单调,并且最小化S=∑i=1N |Ai-Bi|,求出这个最小值S,1<= ...

  5. poj-3666

    http://vjudge.net/problem/POJ-3666 题目是dp 题目;   简单dp 离散一下就好. 我们先来讲一讲不离散的,简单的懂了,其他的也很容易. dp[i] 代表这个数列以 ...

  6. [bzoj1592][Usaco09Feb]Making the Grade 路面修整_动态规划

    Making the Grade 路面修整 bzoj-1592 题目大意:给你n段路,每段路有一个高度h[i],将h[i]修改成h[i]$\pm\delta$的代价为$\delta$,求将这n段路修成 ...

  7. Making the Grade (bzoj1592)题解

    问题 A: Making the Grade (bzoj1592) 时间限制: 1 Sec  内存限制: 128 MB 题目描述       FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求 ...

  8. LG2893/POJ3666 「USACO2008FEB」Making the Grade 线性DP+决策集优化

    问题描述 LG2893 POJ3666 题解 对于\(A\)中的每一个元素,都将存在于\(B\)中. 对\(A\)离散化. 设\(opt_{i,j}\)代表\([1,i]\),结尾为\(j\)的最小代 ...

  9. Making the Grade(POJ3666)

    题目大意: 给出长度为n的整数数列,每次可以将一个数加1或者减1,最少要多少次可以将其变成单调增或者单调减(不严格). 题解: 1.一开始我有一个猜想,就是不管怎么改变,最终的所有数都是原来的某个数. ...

随机推荐

  1. js基础面试高频面点1:变量提升

    一.什么是变量提升?var变量提升的底层原理是什么? 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 原理:引擎在读取js代码的过程中,分为两步,专业来说代码运行是分为预处理 ...

  2. Oracle监控的关键指标

    1.监控事例的等待 select event, , , )) "Prev", , , )) "Curr", count(*) "Tot" f ...

  3. js cookie的读写

    cookie是一小段信息,以键/值对的信息保存在计算机硬盘上的字符串, cookie存储容量大概在4kb,不同的浏览器厂家对cookie大小的限制有微微的差异:cookie主要的本质是“识别”,通过识 ...

  4. 5.1 Components — Introduction

    1. HTML被设计的时候,浏览器是一个简单的文件浏览器.开发构建大的Web应用程序需要更多的东西. 2. 不是试图取代HTML,然而,Ember.js拥抱它,然后增加了许多新功能使得构建web应用程 ...

  5. Ubuntu 添加用户到 sudoer

    一.概述 新建用户后,我们可能需要该用户能够使用一些越权的东西.sudo命令能够暂时提升该用户的权限到root,但是前提是要求该用户存在与 sudoer list 中. sudoers 存储在 /et ...

  6. Java String、StringBuffer、StringBuilder有什么区别

    ① String是Java语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑.它是典型的immutable类,被声明成final class,所有属性也都是final的,由于它的不可变性,类 ...

  7. FlexPaper_1.2.1.swc——Flex在线显示PDF文档(使用FlexPaper)感悟

    http://www.cnblogs.com/wuhenke/archive/2010/03/16/1686885.html 想想自己先前搞PDF转SWF,然后在线浏览功能时,实在是费了不少精力.后来 ...

  8. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  9. Git提交撤销

    场景:本地修改代码后,执行commit提交,但此时想撤销该提交. 执行命令: git reflog   查看所有commit历史 git reset --hard commitid     将当前远程 ...

  10. 如何解决tensorflow报:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

    答:使能AVX,AVX2和FMA来进行源码编译,这样可以提速噢 具体编译方法,请参考windows10下如何进行源码编译安装tensorflow