zoukankan      html  css  js  c++  java
  • UVA-10534 Wavio Sequence (DP+LIS)


    思路:

    正反各求出每个数作为结尾数字的LIS,然后找出最长的Wavio Sequence,用O(n2)试了一次TLE,所以只能用O(nlogn)的算法。


    Code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define INF 0x3f3f3f3f
     4 #define M(a) memset(a, 0, sizeof(a))
     5 const int maxn = 10000 + 10;
     6 int bd[maxn], ed[maxn], bg[maxn], eg[maxn], a[maxn], b[maxn];
     7 
     8 int main() {
     9     int n;
    10     while(~scanf("%d", &n)) {
    11         M(bd), M(ed), M(eg), M(bg);
    12         for (int i = 1; i <= n; ++i) {
    13             scanf("%d", &a[i]);
    14             b[n-i+1] = a[i];
    15         }
    16         for (int i = 1; i <= n; ++i) bg[i] = eg[i] = INF;
    17         for (int i = 1; i <= n; ++i) {
    18             int k = lower_bound(bg+1, bg+n+1, a[i]) - bg;
    19             bd[i] = k;
    20             bg[k] = a[i];
    21             k = lower_bound(eg+1, eg+n+1, b[i]) - eg;
    22             ed[i] = k;
    23             eg[k] = b[i];
    24         }
    25         int ans = 0, temp;
    26         for (int i = 1; i <= n; ++i) {
    27             temp = min(bd[i], ed[n-i+1]);
    28             ans = max(ans, temp);
    29         }
    30         printf("%d
    ", 2*ans-1);
    31     }
    32 
    33     return 0;
    34 }
  • 相关阅读:
    统计学基础
    ip地址分类
    OSI七层协议与TCP/IP模型、三次握手与四次挥手
    计算机编码
    [HNOI2008]Cards
    P4309 [TJOI2013]最长上升子序列
    P3794 签到题IV
    P2605 [ZJOI2010]基站选址
    UVA10791
    P3825 [NOI2017]游戏
  • 原文地址:https://www.cnblogs.com/robin1998/p/6395433.html
Copyright © 2011-2022 走看看