CF946G Almost Increasing Array 题解

news/2024/10/5 18:21:20

题目传送门

前置知识

最长不下降子序列 | 权值树状数组及应用

解法

若将 \(\{ a \}\) 变成严格递增序列,至少需要更改 \(n\) 减去 \(\{ a_{i}-i \}\) 的最长不下降子序列长度个数。

  • 证明
    • 对于 \(a_{i},a_{j}(i<j)\) 若都在最终的严格递增序列里,则有 \(a_{i}-a_{j} \le i-j\),即 \(a_{i}-i \le a_{j}-j\)。而这 \(\{ a_{i}-i \}\) 的最长不下降子序列长度个数是不需要更改的。

考虑计算最多能保留的数的个数。

\(\forall i \in [1,n],b_{i}=a_{i}-i\)

\(f_{i,0/1}\) 表示以 \(i\) 结尾的前缀中没有/有删除过的数时(删除的这个数仅能 \(\in [1,i-1]\),能够在最终保留但不参与运算)最多能保留的数的个数,状态转移方程为 \(\begin{cases} f_{i,0}=\max\limits_{j=1}^{i-1} \{ [b_{j} \le b_{i}] \times (f_{j,0}+1) \} \\ f_{i,1}=\max(\max\limits_{j=1}^{i-1} \{ [b_{j} \le b_{i}] \times (f_{j,1}+1) \},\max\limits_{j=1}^{i-2} \{ [b_{j} \le b_{i}+1] \times (f_{j,0}+1) \}) \end{cases}\),边界为 \(\begin{cases} f_{1,0}=1 \\ f_{1,1}=0 \end{cases}\)

权值树状数组优化 DP 即可。

最终,有 \(max(n-\max\limits_{i=1}^{n} \{ f_{i,0},f_{i,1} \},0)\) 即为所求。

  • 使用删除一定比不使用删除不劣。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
ll a[200010],b[200010],c[400010],f[200010][2];
struct BIT
{ll c[400010];ll lowbit(ll x){return (x&(-x));}void add(ll n,ll x,ll val){for(ll i=x;i<=n;i+=lowbit(i)){c[i]=max(c[i],val);}}ll getsum(ll x){ll ans=0;for(ll i=x;i>=1;i-=lowbit(i)){ans=max(ans,c[i]);}return ans;}
}T[3];
int main()
{ll n,ans=0,i;cin>>n;for(i=1;i<=n;i++){cin>>a[i];b[i]=a[i]-i;c[2*i-1]=b[i];c[2*i]=b[i]+1;}sort(c+1,c+2*n+1);c[0]=unique(c+1,c+2*n+1)-(c+1);for(i=1;i<=n;i++){f[i][0]=T[0].getsum(lower_bound(c+1,c+1+c[0],b[i])-c)+1;f[i][1]=T[1].getsum(lower_bound(c+1,c+1+c[0],b[i])-c);f[i][1]+=(f[i][1]!=0);if(i-2>=1){f[i][1]=max(f[i][1],T[2].getsum(lower_bound(c+1,c+1+c[0],b[i]+1)-c)+1);		}T[0].add(c[0],lower_bound(c+1,c+1+c[0],b[i])-c,f[i][0]);T[1].add(c[0],lower_bound(c+1,c+1+c[0],b[i])-c,f[i][1]);if(i-1>=1){T[2].add(c[0],lower_bound(c+1,c+1+c[0],b[i-1])-c,f[i-1][0]);}}for(i=1;i<=n;i++){ans=max(ans,max(f[i][0],f[i][1]));}cout<<max(n-1-ans,0ll)<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68077.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

12-网络安全审计技术原理与应用

12.1 概述 1)概念 :指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。 作用:在于建立“事后”安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线索及证据,以便于发现潜在的网络安全威胁行为,开展网络安全风险分析及管理。 …

林史语其十(101-110)【下半更新】

12345鉴于收集素材与发布素材之间有一定延迟,此后林史一章分两次更新 先把存的旧东西发一下 #101故事源于 joke3579 学长博客里一份证明,涉及到求不定积分的 如果你不知道啥是不定积分,你只需要知道它是导数逆运算就行了 学长博客里写的是 :\(A\) 求导后等于 \(B\) HDK:\(…

CF 1805 D. A Wide, Wide Graph (*1800) 思维 + 树的直径

CF 1805 D. A Wide, Wide Graph (*1800) 思维 + 树的直径 题目链接 题意:思路: 若当前点到最远的点的距离 \(< k\) , 说明 \(x\) 自己成为一个联通块。 并且我们知道距离任意一点最远的点一定是树直径的一个端点。 反之,则与直径端点在同一个联通块。 所以一个点要么独立…

Windows应急响应-Auto病毒

Windows—Auto病毒应急思路分享。目录应急背景分析样本开启监控感染病毒查看监控分析病毒行为autorun.inf分析2.异常连接3.进程排查4.启动项排查查杀1.先删掉autorun.inf文件2.使用xuetr杀掉进程3.启动项删除重启排查入侵排查正常流程 应急背景 运维人员准备通过windows共享文档…

帝国cms后台admin帐号密码忘记的处理方法

5.1 至 7.0 版本登录 phpMyAdmin访问 http://yourdomain.com/phpmyadmin。 输入数据库用户名和密码登录。选择帝国CMS 安装所在的数据库在 phpMyAdmin 主界面中,找到并选择帝国CMS 使用的数据库。找到 phome_enewsuser 表在数据库中找到名为 phome_enewsuser 的表。 单击该表以…

[OI] 树链剖分

学的时候比较朦胧,现在不朦胧了,所以写一下 讲解 重儿子:一个节点的子树大小最大的儿子 轻儿子:非重儿子 重链:节点 -> 重儿子 -> 重儿子 .. 这样的链A beautiful Tree蓝线为重链可以发现,树上的所有节点一定属于且仅属于一个重链 首先要知道如何找重链 这很简单,…

忘记帝国cms网站后台登录密码和认证码如何找回

1. 准备重置脚本下载附件:下载提供的重置脚本文件。 将文件上传到网站根目录。2. 访问重置页面访问重置页面:访问 /e/update/resetuser.php。 默认密码为 123456,也可以在 resetuser.php 中修改这个密码。3. 重置密码输入密码:输入默认密码 123456。 跳转到重置密码页面。 …

Golang安全开发第一节

Golang安全开发 一、安装Go&编译器基础使用 1. 安装包地址 https://golang.google.cn 2. 添加环境变量 windows 直接点击msi安装即可 Linux tar -zxvf xxx.xxx.xxx.tar.gz mv -r go /use/local/go vim /etc/profile export PATH=$PATH:/usr/local/go/bin source /etc/profi…