HDU 4604 deque 最长上升子序列
2024-09-27 21:08:52
枚举每个位置,求以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 ;
}
最新文章
- JS-underfined is not a function
- 使用 PHP 过滤器(Filter)进行严格表单验证
- 第五章:Logistic回归
- CSS样式表引用方式
- GIS科研站
- Android视图框架
- 简单的遮罩层效果,user登陆显示效果
- ScreenCaptureHtmlUnitDriver.java
- Java Stream
- salesforce lightning零基础学习(十一) Aura框架下APP构造实现
- Linux iptables设置
- 服务器SSL不安全漏洞修复方案
- Linux----centos安装mysql
- 缺陷管理工具Jira安装参考
- Spring Cloud Config 配置高可用集群
- MVC的路由设置【转】
- display:inline、block、inline-block区别
- 更改KVM虚拟机root的密码
- HDU1510 White rectangles( 乱搞 O(n^3) )题解
- 配置bootstrap环境
热门文章
- zendframework 事件管理(一)
- Eclipse下jad反编译之&ldquo;类文件查看器&rdquo;不能处理给定的输入错误解决
- [MVC] - 异步调用后台的常用方法。
- 敏捷开发之道(三)极限编程XP续
- JS读取UserAgent信息并做判断
- linux 下 安装 rpm 格式 的 mysql
- UVA 10720 Graph Construction 贪心+优先队列
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- Linux查看系统基本信息
- sgu 138