题解:

和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. uchome 缓存生成

    一.uchome的缓存目录 ---------data此目录要有777权限 (1)模板文件缓存机制 1:在要显示的页面通过include template($name) 语句来包含被编译后的模板文件 ...

  2. Nginx反向代理服务器安装与配置

    一.服务器安装: sudo yum install gcc-c++ sudo yum install pcre pcre-devel sudo yum install zlib zlib-devel ...

  3. 003-and design-在create-react-app项目中使用antd

    一.概述 create-react-app 是业界最优秀的 React 应用开发工具之一,本文会尝试在 create-react-app 创建的工程中使用 antd 组件,并自定义 webpack 的 ...

  4. samba文件共享服务配置(multiuser机制)二 (共两节)

    smb客户端的multiuser挂载技术 --管理员只需要作一次挂载 --客户端在访问挂载点时,若需要不同权限,可临时切换新的共享用户[无需重新挂载] 实现方式 --挂载smb共享时启用multius ...

  5. 安装完C++builder6.0启动的时候总是出现无法将'C:\Program Files\Borland\CBuilder6\Bin\bcb.$$$'重命名为bcb.dro

    :兼容性问题  运行前右键属性“兼容性”-尝试不同的兼容性.比如“windows 8”

  6. (2)Mac环境搭建

    创建HelloWorld项目 将刚才下载的压缩包解压到你指定的文件夹里. 进入到目录cocos2d-x-3.2alpha0/tools/cocos2d-console/bin/cocos.py 打开终 ...

  7. 1:1 Struts2概述

    jar包下载

  8. Spring MVC 复习笔记04

    复习 springmvc框架: DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器:根据url查找Handler.(可以通 ...

  9. 大数据领域两大最主流集群管理工具Ambari和Cloudera Manger

    不多说,直接上干货! 目前啊,都知道,大数据集群管理方式分为手工方式(Apache hadoop)和工具方式(Ambari + hdp 和Cloudera Manger + CDH).  手工部署呢, ...

  10. Github 上传代码的两种方式

    上传本地代码/文件->Github 折腾了半天时间... Github前期准备部分 1)登录github,新建一个 repository 2)repository 命名 3)Github是一个托 ...