3902-luogu 最长不下降子区间
题目
现有数列A1,A2,…An ,修改最少的数字,使得数列严格单调递增。
依旧是书上的题
但是书上的范围比较小
而
lg上的数据范围很大
按书上的
方法
是会超时 只能过一半的数据
但是
算法思路还算可以
所以还是分析一下吧
#include<cstdio>
using namespace std;
int n,l;
int a[100000][3];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i][1]);
a[i][2]=1; //每一个数自身就是一个长度为一的最长不下降子序列
}
for(int i=n-1;i>=1;i--)
{
l=0;
for(int j=i+1;j<=n;j++)
if(a[j][1]>a[i][1] && a[j][2]>l) //当a[i]后面的数大于前面的数的时候
l=a[j][2];//如果后面有比当前还大的最长子序列 就替换 否则不替换
if(l>0)
a[i][2]=l+1;//当后面的一直都是下降的时候 也就是前面循环中的if一直不成立 l必定为0 那么这个就不成立了
}//从后往前 判断每个点到最后的最长不下降子序列
int k=l;
for(int j=1;j<=n;j++)
if(a[j][2]>a[k][2])
k=j;
printf("%d",n-a[k][2]);//寻找最大子序列并输出最少替换
return 0;
}
那么
就下来
就是
较优解了
/*题解
相当于找出最长上升子序列,然后要修改的数字数即数列长度减最长上升子序列长度
但是这个最长上升子序列需要优化
有一个经典的二分优化最长上升子序列的方法 设f存放一个上升序列,每次对于数列中的一个数Ai,将它与序列最后面的一个数比较,若大于最后一个数那么上身序列长度+1,否则二分在上升序列中找一个刚好比它大的数,用Ai代替这个数,这样做不会对原有结果产生影响,因为原有结果已经固定了,且不会破坏上升序列,可以使上升序列更优,因为在不破坏严格单调递增同时让序列中的数尽可能小,就可以在序列后放更多的数了 */
#include <cstdio>
using namespace std;
int n,ans=1;//ans 累加器
int a[100005],f[100005];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
f[1]=a[1];
for (int i=2;i<=n;i++)
{
if (a[i]>f[ans])
f[++ans]=a[i];
else
{
int l=1,r=ans,k=0;
while (l<=r)
{
int mid=(l+r)/2;
if (f[mid]<a[i])
k=mid,l=mid+1;
else
r=mid-1;
}//二分替换
f[k+1]=a[i];
} }
printf("%d",n-ans); }
3902-luogu 最长不下降子区间的更多相关文章
- Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列)
Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列) Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺 ...
- 【题解】Luogu P2766 最长不下降子序列问题
原题传送门 实际还是比较套路的建图 先暴力dp一下反正数据很小 第一小问的答案即珂以求出数列的最长不下降子序列的长度s 考虑第二问如何做: 将每个点拆点 从前向后连一条流量为1的边 如果以它为终点的最 ...
- 【Luogu】P2766最长不下降子序列问题(暴力网络流)
题目链接 水题qwq,数据都那么水. 我要是出数据的人我就卡$n^3$建图. qwq. 然而这么水的题我!居!然!没!有!1!A!!还!提!交!了!五!遍!!! md从现在开始要锻炼1A率了 看我从今 ...
- [**P2766** 最长不下降子序列问题](https://www.luogu.org/problemnew/show/P2766)
P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(dp(i)\)代表以\(i\)为起点的\(LIS\)是多少.转移太显然了 \[ dp(i)=m ...
- P2766 最长不下降子序列问题 网络流
link:https://www.luogu.org/problemnew/show/P2766 题意 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的 ...
- 最长不下降子序列(LIS)
最长上升子序列.最长不下降子序列,解法差不多,就一点等于不等于的差别,我这里说最长不下降子序列的. 有两种解法. 一种是DP,很容易想到,就这样: REP(i,n) { f[i]=; FOR(j,,i ...
- 最长不下降子序列 O(nlogn) || 记忆化搜索
#include<stdio.h> ] , temp[] ; int n , top ; int binary_search (int x) { ; int last = top ; in ...
- tyvj 1049 最长不下降子序列 n^2/nlogn
P1049 最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 ...
- 最长不下降子序列的O(n^2)算法和O(nlogn)算法
一.简单的O(n^2)的算法 很容易想到用动态规划做.设lis[]用于保存第1~i元素元素中最长不下降序列的长度,则lis[i]=max(lis[j])+1,且num[i]>num[j],i&g ...
随机推荐
- Mysql存储过程入门介绍
delimiter //一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行. 一.创建存储过程 1.基本语法: crea ...
- 【Spring】18、springMVC对异常处理的支持
无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...
- 关于CSS3的filter(滤镜) 属性
修改所有图片或者元素的颜色为黑白 (100% 灰度) DOM{ -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */ filter: ...
- css清楚浮动的class
.clearfix:after { display: table; visibility: hidden; clear: both; height:; content: ''; } 直接在浮动元素的父 ...
- [总结]jQuery之选择器集合
jQuery 的选择器可谓之强大无比,常用的元素查找方法: $("#myELement") //选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是my ...
- Loadrunner 脚本开发-从文件读取数据并参数化
脚本开发-从文件读取数据并参数化 by:授客 QQ:1033553122 直接上代码: char* testfn() { int count, total = 0; //char buffer[1 ...
- 使用VSTS的Git进行版本控制(六)——拉取请求
使用VSTS的Git进行版本控制(六)--拉取请求 在将代码合并到主干之前,拉取请求让团队对特性分支的更改提供反馈.审阅人可以通过建议修改留下评论,并投票批准或拒绝代码. 任务1:在Visual St ...
- 洗礼灵魂,修炼python(54)--爬虫篇—urllib2模块
urllib2 1.简介 urllib2模块定义的函数和类用来获取URL(主要是HTTP的),他提供一些复杂的接口用于处理: 基本认证,重定向,Cookies等.urllib2和urllib差不多,不 ...
- python第七天-作业[购物车]
作业要示: 购物车程序:启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出 ...
- AspNetCore2身份验证
1.在Startup类的Configure方法,添加身份验证的中间件AuthenticationMiddleware app.UseAuthentication(); 2.在Startup类的Conf ...