题目传送门

题意:找对称的,形如:123454321 子序列的最长长度

分析:LIS的nlogn的做法,首先从前扫到尾,记录每个位置的最长上升子序列,从后扫到头同理。因为是对称的,所以取较小值*2-1再取最大值

代码:

/************************************************
* Author :Running_Time
* Created Time :2015-8-5 21:38:32
* File Name :UVA_10534.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e4 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int a[MAXN];
int d[MAXN];
int dp[MAXN], dp2[MAXN]; int main(void) { //UVA 10534 Wavio Sequence
int n;
while (scanf ("%d", &n) == 1) {
for (int i=1; i<=n; ++i) scanf ("%d", &a[i]);
memset (d, 0, sizeof (d));
memset (dp, 0, sizeof (dp));
memset (dp2, 0, sizeof (dp2));
d[1] = a[1]; int len = 1; dp[1] = 1;
for (int i=2; i<=n; ++i) {
if (d[len] < a[i]) d[++len] = a[i];
else {
int j = lower_bound (d+1, d+1+len, a[i]) - d;
d[j] = a[i];
}
dp[i] = len;
}
d[1] = a[n]; int len2 = 1; dp2[n] = 1;
for (int i=n-1; i>=1; --i) {
if (d[len2] < a[i]) d[++len2] = a[i];
else {
int j = lower_bound (d+1, d+1+len2, a[i]) - d;
d[j] = a[i];
}
dp2[i] = len2;
}
int ans = 0;
for (int i=1; i<=n; ++i) {
ans = max (ans, min (dp[i], dp2[i]) * 2 - 1);
}
printf ("%d\n", ans);
} return 0;
}

  

最新文章

  1. 在C语言中利用PCRE实现正则表达式
  2. Microsoft Message Analyzer (微软消息分析器,&ldquo;网络抓包工具 - Network Monitor&rdquo;的替代品)官方正式版现已发布
  3. 动态拼接linq 使用Expression构造动态linq语句
  4. C# 去除字符串首尾字符或字符串
  5. Codeforces Round #274 Div.1 C Riding in a Lift --DP
  6. elasticsearch2.2 集群搭建各种坑
  7. PHP Session可能会引起并发问题
  8. 在虚拟环境中安装pygame
  9. JSON对象和string的相互转换
  10. RHEL双网卡绑定
  11. RANSAC算法详解
  12. Jedis-returnResource使用注意事项
  13. bzoj 3207: 花神的嘲讽计划Ⅰ
  14. Alpha第九天
  15. Linux文件编辑vi、mkdir等
  16. [Java] Apache Ant 构建基础教程
  17. elasticsearch 安装(基于java运行环境)
  18. k8s官方安装版本
  19. Java输出错误信息与调试信息
  20. Kafka producer拦截器(interceptor)

热门文章

  1. MeepoPS基本使用方法
  2. AOJ 0118 Property Distribution (DFS)
  3. Balance POJ - 1837 地推
  4. js格式化日期时间
  5. Codeforces 799E(贪心)
  6. 【c++】【转】c++中的explicit关键字
  7. Linux学习系列之memcached
  8. 【Android归纳】回调机制在Android中的应用与实战
  9. Ios开发之 -- js和ios的交互
  10. 加入收藏BUG改善