HDU 4604 deque 最长上升子序列
枚举每个位置,求以num[i]为起点的最长不下降子序列和以num[i]为结尾的最长不递增子序列。
并且把相同值的个数统计一下,最后要减去算重复了的。
比如:
1
9
4 4 2 2 2 3 3 3 7
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int MAXN = + ; int n;
int num[MAXN];
int stack1[MAXN];
int stack2[MAXN];
int dp1[MAXN];
int dp2[MAXN];
int same1[MAXN];
int same2[MAXN]; void DP( int *stack, int *dp, int *same )
{
int top = ; stack[ ++top ] = num[]; dp[] = ;
same[] = ;
int temp; for ( int i = ; i < n; i++ )
{
int x = upper_bound( stack + , stack + top + , num[i] ) - stack;
int y = lower_bound( stack + , stack + top + , num[i] ) - stack; if ( num[i] >= stack[top] )
{
stack[ ++top ] = num[i];
temp = top;
}
else
{
stack[x] = num[i];
temp = x;
}
dp[i] = temp;
same[i] = x - y + ;
} return;
} int main()
{
int T;
scanf("%d", &T);
while ( T-- )
{
scanf( "%d", &n );
for ( int i = n - ; i >= ; --i )
scanf( "%d", &num[i] ); DP( stack1, dp1, same1 ); for ( int i = ; i < n; ++i )
{
// printf( "%d ", num[i] );
num[i] = -num[i];
}
//puts("");
DP( stack2, dp2, same2 ); int ans = ;
for ( int i = ; i < n; ++i )
{
//printf( "%d %d\n", dp1[i], dp2[i] );
//printf( "**%d %d\n", same1[i], same2[i] );
ans = max( ans, dp1[i] + dp2[i] - min( same1[i], same2[i] ) );
} printf( "%d\n", ans );
}
return ;
}
HDU 4604 deque 最长上升子序列的更多相关文章
- hdu 4604 Deque(最长上升与下降子序列-能够重复)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 这个题解有点问题,暂时没时间改,还是参考别人的吧 #include <cstdio> ...
- HDU 4604 Deque(最长上升子序)
题目链接 本来就对N*log(N)算法不大会....然后各种跪了,求出最长不下降+最长不上升-最少相同元素.求相同元素,用二分求上界搞的.代码里4个二分.... #include <cstdio ...
- HDU 4604 Deque 二分最长上升子序列
题目大意就是给一个deque 然后有n个数,依次进行操作,每种操作,你可以把这个数放在deque首部,也可以放在尾部,也可以扔掉不管,但是要保证deque中的数是非递减的.最要求deque中最长能是多 ...
- hdu 4604 Deque(最长不下降子序列)
从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后 ...
- HDU 4604 Deque 最长子序列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 Deque Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)
Bellovin Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...
- HDU 4681 String 最长公共子序列
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意: 给你a,b,c三个串,构造一个d串使得d是a,b的子序列,并且c是d的连续子串.求d最大 ...
- hdu 1025 dp 最长上升子序列
//Accepted 4372 KB 140 ms //dp 最长上升子序列 nlogn #include <cstdio> #include <cstring> #inclu ...
- hdu 5489(LIS最长上升子序列)
题意:一个含有n个元素的数组,删去k个连续数后,最长上升子序列 /*思路参考GoZy 思路: 4 2 3 [5 7 8] 9 11 ,括号表示要删掉的数, 所以 最长上升子序列 = ...
随机推荐
- c指针提高
今天看了两章C语言,于是乎编段程序复习下. 还是不清楚这些神奇的东西的到底要干嘛用... 敲完后,显得这段代码高大上 但是,想实现这个程序,需要这么写的复杂吗?==|| #include & ...
- .NET Framework 3.5 安装错误:0x800F0906、0x800F081F、0x800F0907
使用Add-WindowsFeature 照成的问题 I get the failure below.. If I pick the Server 2012 R2 image from 8/15/2 ...
- Keil uVision4 代码编辑器中文字符乱码问题
MDK-ARM 使用中一直有个很纠结的问题,中文字符支持不好. 比如写代码注释,使用中文删除字符就会只删除一半问题.复制粘贴代码中间有中文就会出现乱码问题. 想过换IAR,新学个IDE也麻烦,上面的问 ...
- Daject初探 - 从Table模型得到Record模型
前言: 如果你还不知道Daject是什么,如何使用,可以浏览 http://www.cnblogs.com/kason/p/3577359.html github地址:https://github.c ...
- 线性判别分析(LDA), 主成分分析(PCA)及其推导【转】
前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA ...
- 《Power》读书笔记
原创作品 版权所有 转载请注明出处! 序言 权力是“争”来的,不是“等”来的. 会计.工商管理.营销和销售部门.财务人员(背景).企业咨询小组 在位晋升而竞争的时候,对于公平竞争原则,有些人会采取变通 ...
- Android-Empty-Layout:展示不同类型的页面布局,用于视图是空的时候
Android-Empty-Layout:这个布局可以作用在Listview,Gridview,用于显示数据的是空的时候,可以提示友好的页面.这库可以显示页面出错,页面加载,页面是空. 加载的动画页面 ...
- ContextLoaderListener作用详解
参考网址:http://blog.csdn.net/ysughw/article/details/8992322 ContextLoaderListener监听器的作用就是启动Web容器时,自动装配A ...
- git撤销删除
问题描述: 使用git时本地文件删除了,提交至github,希望撤销修改,找回源文件 问题解决: (1)查看git log,查看日志信息 注: 使用 git log 可以查看提交的日志 ...
- Chrome浏览器下调试SASS
网上说的方案各有各的说法,尝试多个才找到有效方案,为避免后来者麻烦,现在讲讲如何调试 笔者ruby版本为3.4.19,因为sass文件的编译是需要ruby环境的,使用sass前需要先安装! 第一步(核 ...