枚举每个位置,求以num[i]为起点的最长不下降子序列和以num[i]为结尾的最长不递增子序列。

并且把相同值的个数统计一下,最后要减去算重复了的。

比如:

1

9

4 4 2 2 2 3 3 3 7

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int MAXN = + ;
  8.  
  9. int n;
  10. int num[MAXN];
  11. int stack1[MAXN];
  12. int stack2[MAXN];
  13. int dp1[MAXN];
  14. int dp2[MAXN];
  15. int same1[MAXN];
  16. int same2[MAXN];
  17.  
  18. void DP( int *stack, int *dp, int *same )
  19. {
  20. int top = ;
  21.  
  22. stack[ ++top ] = num[];
  23.  
  24. dp[] = ;
  25. same[] = ;
  26. int temp;
  27.  
  28. for ( int i = ; i < n; i++ )
  29. {
  30. int x = upper_bound( stack + , stack + top + , num[i] ) - stack;
  31. int y = lower_bound( stack + , stack + top + , num[i] ) - stack;
  32.  
  33. if ( num[i] >= stack[top] )
  34. {
  35. stack[ ++top ] = num[i];
  36. temp = top;
  37. }
  38. else
  39. {
  40. stack[x] = num[i];
  41. temp = x;
  42. }
  43. dp[i] = temp;
  44. same[i] = x - y + ;
  45. }
  46.  
  47. return;
  48. }
  49.  
  50. int main()
  51. {
  52. int T;
  53. scanf("%d", &T);
  54. while ( T-- )
  55. {
  56. scanf( "%d", &n );
  57. for ( int i = n - ; i >= ; --i )
  58. scanf( "%d", &num[i] );
  59.  
  60. DP( stack1, dp1, same1 );
  61.  
  62. for ( int i = ; i < n; ++i )
  63. {
  64. // printf( "%d ", num[i] );
  65. num[i] = -num[i];
  66. }
  67. //puts("");
  68. DP( stack2, dp2, same2 );
  69.  
  70. int ans = ;
  71. for ( int i = ; i < n; ++i )
  72. {
  73. //printf( "%d %d\n", dp1[i], dp2[i] );
  74. //printf( "**%d %d\n", same1[i], same2[i] );
  75. ans = max( ans, dp1[i] + dp2[i] - min( same1[i], same2[i] ) );
  76. }
  77.  
  78. printf( "%d\n", ans );
  79. }
  80. return ;
  81. }

HDU 4604 deque 最长上升子序列的更多相关文章

  1. hdu 4604 Deque(最长上升与下降子序列-能够重复)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 这个题解有点问题,暂时没时间改,还是参考别人的吧 #include <cstdio> ...

  2. HDU 4604 Deque(最长上升子序)

    题目链接 本来就对N*log(N)算法不大会....然后各种跪了,求出最长不下降+最长不上升-最少相同元素.求相同元素,用二分求上界搞的.代码里4个二分.... #include <cstdio ...

  3. HDU 4604 Deque 二分最长上升子序列

    题目大意就是给一个deque 然后有n个数,依次进行操作,每种操作,你可以把这个数放在deque首部,也可以放在尾部,也可以扔掉不管,但是要保证deque中的数是非递减的.最要求deque中最长能是多 ...

  4. hdu 4604 Deque(最长不下降子序列)

    从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后 ...

  5. HDU 4604 Deque 最长子序列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 Deque Time Limit: 4000/2000 MS (Java/Others)     ...

  6. hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)

    Bellovin Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...

  7. HDU 4681 String 最长公共子序列

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意: 给你a,b,c三个串,构造一个d串使得d是a,b的子序列,并且c是d的连续子串.求d最大 ...

  8. hdu 1025 dp 最长上升子序列

    //Accepted 4372 KB 140 ms //dp 最长上升子序列 nlogn #include <cstdio> #include <cstring> #inclu ...

  9. hdu 5489(LIS最长上升子序列)

    题意:一个含有n个元素的数组,删去k个连续数后,最长上升子序列        /*思路参考GoZy 思路: 4 2 3 [5 7 8] 9 11 ,括号表示要删掉的数, 所以  最长上升子序列  = ...

随机推荐

  1. SQLserver行转列与列转行

    行表: 行表 姓名 属性 属性值 JACK 身高 180 JACK 体重 80 JACK 年龄 27 TOM 身高 164 TOM 体重 59 TOM 年龄 20 列表: 列表 姓名 身高 年龄 体重 ...

  2. C#中类型分析中的常见问题 Type - 转

    http://www.cnblogs.com/yuanyuan/archive/2012/08/16/2642281.html 写代码的时候经常需要分析已有类型的信息例如:分析现有类型自动生成类, 或 ...

  3. python 日期转星期

    import time import datetime today = int(time.strftime('%w')) print today anyday = datetime.datetime( ...

  4. 【BZOJ】【1934】【SHOI 2007】Vote 善意的投票

    网络流/最小割 简单题= =直接利用最小割的性质: 割掉这些边后,将所有点分成了两部分(两个连通块),我们可以假定与S相连的是投赞成票,与T相连的是投反对票. 那么如果一个小朋友原本意愿是睡觉,那么连 ...

  5. Java多线程——<五>后台线程(daemon)

    一.后台线程(守护线程) 学一个东西,最重要的一点就是,为什么要用它? 后台线程区别于普通线程,普通线程又可以称为用户线程,只完成用户自己想要完成的任务,不提供公共服务.而有时,我们希望编写一段程序, ...

  6. C#枚举注释实例

    public enum 枚举名称    {        /// <summary>        /// 注释描述1        /// </summary>        ...

  7. linux系统进程的内存布局

    内存管理模块是操作系统的心脏:它对应用程序和系统管理非常重要.今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕.由于不少概念是通用的,所以文中大部分例子取自32位x86平台的Lin ...

  8. tornado解析http body的过程分析

    tornado解析http body的过程分析 在最近写的一个RESTful API Server过程中,发现tornaod对解析POST BODY的内容有限制. 而在以前用web.py则没有这个限制 ...

  9. hdu 1242 Rescue(BFS,优先队列,基础)

    题目 /******************以下思路来自百度菜鸟的程序人生*********************/ bfs即可,可能有多个’r’,而’a’只有一个,从’a’开始搜,找到的第一个’r ...

  10. SGU 114

    114. Telecasting station time limit per test: 0.25 sec. memory limit per test: 4096 KB Every city in ...