题目

首先把\(a\)改成严格单调上升等于把\(a_i-i\)改成单调不降。

那么第一问可以直接做LIS,答案就是\(n-\)LIS的长度。

同时我们记录一下序列中每个位置结尾的LIS长度。

第二问我们考虑这样一个事实:

对于LIS中相邻的两个数\(a_i,a_j\),这两个数中间的数一定要么\(<a_i\)要么\(>a_j\)。

考虑一种修改方案,显然修改后中间的数会呈现阶梯状。

对于任意一个阶梯\((l,r,x)\),如果它上面的数(\([l,r]\)中\(>x\)的数)的个数大于下面的数的个数(\([l,r]\)中\(<x\)的数),那么我们把它往上移到下一个阶梯的高度一定会更优。

反之我们把它移到下一个阶梯的高度一定会更优。

如果上面和下面的数个数相等,我们随便怎么移动都不会改变这个代价。

因此最终我们一定可以把它移成两个阶梯\((i+1,k,a_i),(k+1,j,a_j)\)。

那么对于LIS中相邻的两数\(a_i,a_j\),最优的修改方案一定是找到某个\(k\),把\(a_{i+1}\sim a_k\)改成\(a_i\),把\(a_{k+1}\sim a_j\)改成\(a_j\)。

我们枚举这个\(k\)。然后计算。

注意到数据随机,所以LIS的期望长度为\(\log n\),因此复杂度正确。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
const int N=35007,inf=0x3f3f3f3f;
int read(){int x=0,c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
ll min(ll a,ll b){return a<b? a:b;}
int abs(int a){return a<0? -a:a;}
int a[N],num[N],f[N];ll g[N],s[N],t[N];vector<int>E[N];
int main()
{
int n=read(),i,k,l,len;
for(i=1;i<=n;++i) a[i]=read()-i;
a[++n]=inf,a[0]=-inf,memset(num,0x3f,sizeof num),num[0]=-inf,num[1]=a[1],f[1]=len=1,memset(g,0x3f,sizeof g),g[0]=0;
for(i=2;i<=n;++i) l=upper_bound(num,num+len+1,a[i])-num,len=max(len,l),f[i]=l,num[l]=min(num[l],a[i]);
for(i=0;i<=n;++i) E[f[i]].pb(i);
for(i=1;i<=n;++i)
for(int j:E[f[i]-1])
{
if(j>i||a[j]>a[i]) continue;
for(k=j;k<=i;++k) s[k]=abs(a[k]-a[j]),t[k]=abs(a[k]-a[i]);
for(k=j+1;k<=i;++k) s[k]+=s[k-1],t[k]+=t[k-1];
for(k=j;k<i;++k) g[i]=min(g[i],g[j]+s[k]-s[j]+t[i]-t[k]);
}
printf("%d\n%lld",n-f[n],g[n]);
}

Luogu P2501 [HAOI2006]数字序列的更多相关文章

  1. 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)

    2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...

  2. 洛谷 P2501 [HAOI2006]数字序列 解题报告

    P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...

  3. p2501 [HAOI2006]数字序列

    传送门 分析 https://www.luogu.org/blog/FlierKing/solution-p2501 对于第二问的感性理解就是有上下两条线,一些点在上面的线的上面或者下面的线的下面,然 ...

  4. P2501 [HAOI2006]数字序列 (LIS,DP)(未完成)

    第二问好迷... #include "Head.cpp" #include <vector> const int N = 35007; vector<int> ...

  5. 【BZOJ1049】 [HAOI2006]数字序列

    BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...

  6. 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)

    1049: [HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变 ...

  7. bzoj 1049 [HAOI2006]数字序列

    [bzoj1049][HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不 ...

  8. 【BZOJ1049】【Luogu P2501】 [HAOI2006]数字序列 DP,结论,LIS

    很有(\(bu\))质(\(hui\))量(\(xie\))的一个题目. 第一问:求最少改变几个数能把一个随机序列变成单调上升序列. \(Solution:\)似乎是一个结论?如果两个数\(A_i\) ...

  9. 洛谷P2501 bzoj1049 [HAOI2006]数字序列

    题目链接 bzoj 洛谷 题解 第一问: 假如 \(i < j\) 如果 \(j\)能从\(i\)转移过来 显然中间空隙必须足够 例如:\(50\) \(53\) \(53\) \(52\) 就 ...

随机推荐

  1. jquery attribute选择器 语法

    jquery attribute选择器 语法 作用:[attribute] 选择每个带有指定属性的元素.可以选取带有任何属性的元素(对于指定的属性没有限制). 语法:$("[attribut ...

  2. python 数据库错误处理

    DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常: 异常 描述 Warning 当有严重警告时触发,例如插入数据是被截断等等.必须是 StandardError 的子类. Er ...

  3. QT5线程关闭

    QT5线程关闭 QThread析构函数的说明:请注意,删除一个QThread对象不会停止它管理的线程的执行. 删除正在运行的QThread(即isFinished()返回false)将导致程序崩溃. ...

  4. 窗体操作:ShowWindow(SW_HIDE)

    BOOL ShowWindow( int nCmdShow ); Return Value 作用: 如果窗口原来可见,则返回非零值:如果CWnd原来是隐藏的,则返回0   参数: Parameters ...

  5. [Jenkins]Job中如何传递自定义变量

    场景一: Job构建步骤间的变量传递 Jenkins提供了数十种构建方式,我们以最常用的『Execute shell』为例.有时为了使Job中的复杂的构建流程更加清晰我们配置多个构建步骤像下面这样.图 ...

  6. 【转载】多网卡的7种bond模式原理

    多网卡的7种bond模式原理 Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0 ...

  7. oracle11G 同时支持IPV4和IPV6配置

    1.修改listener.ora文件 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ...

  8. R_Studio(时序)Apriori算法寻找频繁项集的方法

    应用ARIMA(1,1,0)对2015年1月1日到2015年2月6日某餐厅的销售数量做为期5天的预测 setwd('D:\\dat') #install.packages("forecast ...

  9. 2019java第十二周课程总结

    本周主要还是学习图形界面 各种容器使用方法 如下代码: package text10; import java.awt.*; import java.io.File; import javax.swi ...

  10. laravel 发送html邮件是a标签中的url不显示问题