HDU 4604 Deque 最长子序列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604
Deque
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1879 Accepted Submission(s): 689
The teacher gave Alice a sequence of number(named A) and a deque. The sequence exactly contains N integers. A deque is such a queue, that one is able to push or pop the element at its front end or rear end. Alice was asked to take out the elements from the sequence in order(from A_1 to A_N), and decide to push it to the front or rear of the deque, or drop it directly. At any moment, Alice is allowed to pop the elements on the both ends of the deque. The only limit is, that the elements in the deque should be non-decreasing.
Alice's task is to find a way to push as many elements as possible into the deque. You, the greatest programmer, are required to reclaim the little girl from despair.
For each case, the first line is the length of sequence N(1≤N≤100000).
The following line contains N integers A1,A2,…,AN.
1 2 3 4 5 6 7
4 3 2 1 5
5 4 1 2 3
#include<cstdio>
#include<cstring>
int a[],z[],j[],zm[],jm[];
// z中存的是以i个数起始的最长递增子序列的最大长度,j中存的递减子序列的长度,zm长度为i的递增序列的初始项,jm递减序列的初始项
int lz,lj;
void findzeng(int index,int x,int l)//找到大于x的子序列,zm单调减
{
int f,t,h=l;
/* if(x>zm[1])
{
z[index]=1;
zm[1]=x;
} */
f=;
while(f<=h)//二分法查找
{
t=(f+h)/;
if(x<=zm[t])f=t+;
else h=t-;//x>zm[t]的情况
}
z[index]=f;
if(f>lz)
{
lz=f;
zm[f]=x;
}
else if(x>zm[f])
zm[f]=x;
}
void findjian(int index,int x,int l)
{
int f,t,h=l;
f=;
while(f<=h)//j[n]单调增
{
t=(f+h)/;
if(x>=jm[t])
f=t+;
else
h=t-;
}
j[index]=f;
if(f>lj)
{
lj=f;
jm[f]=x;
}
else if(jm[f]>x)
jm[f]=x;
}
int main()
{
// freopen("1.in","r",stdin);
int t,n,i,maxl,temp,k;
scanf("%d",&t);
while(t--)
{
maxl=;
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
memset(zm,,sizeof(zm));
memset(jm,,sizeof(jm));
z[n]=;j[n]=;
zm[]=a[n];jm[]=a[n];
lz=;lj=;
for(i=n-;i>;i--)
{
findzeng(i,a[i],lz);
findjian(i,a[i],lj);
}
for(i=;i<=n;i++)
{
if(maxl>=n-i+)
break;
temp=z[i]+j[i]-;
k=;
while(z[i]-k>&&zm[z[i]]==zm[z[i]-k])
{
temp-=;k++;
}
if(temp>maxl)
maxl=temp;
}
printf("%d\n",maxl);
}
return ;
}
HDU 4604 Deque 最长子序列的更多相关文章
- hdu 4604 Deque
http://acm.hdu.edu.cn/showproblem.php?pid=4604 将原数组根据其大小关系处理后 使其大小全在10^5内 处理后为 a1,a2,a3.....an 最优deq ...
- hdu 4604 Deque(最长上升与下降子序列-能够重复)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 这个题解有点问题,暂时没时间改,还是参考别人的吧 #include <cstdio> ...
- HDU 4604 Deque 二分最长上升子序列
题目大意就是给一个deque 然后有n个数,依次进行操作,每种操作,你可以把这个数放在deque首部,也可以放在尾部,也可以扔掉不管,但是要保证deque中的数是非递减的.最要求deque中最长能是多 ...
- HDU 1160 DP最长子序列
G - FatMouse's Speed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- hdu 4604 Deque(最长不下降子序列)
从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后 ...
- HDU 4604 Deque(最长上升子序)
题目链接 本来就对N*log(N)算法不大会....然后各种跪了,求出最长不下降+最长不上升-最少相同元素.求相同元素,用二分求上界搞的.代码里4个二分.... #include <cstdio ...
- HDU 4604 deque 最长上升子序列
枚举每个位置,求以num[i]为起点的最长不下降子序列和以num[i]为结尾的最长不递增子序列. 并且把相同值的个数统计一下,最后要减去算重复了的. 比如: 1 9 4 4 2 2 2 3 3 3 7 ...
- HDU 1513 最长子序列
Palindrome Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)
题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP ...
随机推荐
- warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
先来一段json_decode官方说明 mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, i ...
- 新一代 PHP 加速插件 Zend Opcache <转>
注: 由于原链接已不存在, 所以我把图片重新整理了一下, 以便看起来更加直观 笔者注: 1> PHP 性能提升之 PHP NG => php next generation wiki ...
- 什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
Advanced Audio Coding(高级音频解码),是一种由MPEG-4标准定义的有损音频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主要的贡献者. 在使用 ...
- servlet+jdbc+javabean其实跟ssh差不多
我给的这个架构可以代替ssh的架构进行项目的开发 common中放的是一些公用类 dao中放的是一些对数据的处理 entity其实也就是javabean service中放的是一些抽象类,简单来说抽象 ...
- Linq101-Aggregate
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Aggrega ...
- 关于<:if>没有<c:else>解决方案
<c:if>没有<c:else>可以用<c:choose>来取代结构: <c:choose> <c:when test=""& ...
- asp.net中@page 指令的属性Inherits、Src、CodeBehind区别
在 ASP.NET 中使用代码隐藏方法来设计Web 窗体,可使页代码能够更清晰地从 HTML 内容中分离到完全单独的文件中. <%@ Page language="c#" C ...
- .net处理页面的抓取数据
//要抓取数据的页面路径 string url = "http://www.scedu.net/banshi/used-car/lower-secondary-education/middl ...
- 从服务器将Oracle数据库导出到本地Oracle数据库的方法
1.将服务器上的Oracle数据库导入到本地 在CMD模式下执行以下命令: exp username1/password@服务器端数据库 file=本地硬盘:/文件名.dmp 例如: exp ...
- idea 多模块项目依赖父工程class找不到问题
比如,我们有这么个过程,项目结构如下: a --b --c a是总结点,b是子节点,c是父节点 b依赖父节点class,通过maven构建时通常我们会在子节点中添加父节点依赖,如: <depen ...