// uva 10534 Wavio Sequence
//
// 能够将题目转化为经典的LIS。
// 从左往右LIS记作d[i],从右往左LIS记作p[i];
// 则最后当中的min(d[i],p[i])就是这个波动序列的一半
// 在这最后的min(d[i],p[i]) * 2 + 1 的最大值就是我们所要求的答案
//
// 这题開始想的最后的答案是d[i]==p[i]的时候求最大。 // 可是这样是不正确的,比如n=4,
// 1,3,1,0
// 最长的应该是3,可是我的答案是1,明显是错的
//
// 细致想来,确实是这样。仅仅要取min(d[i],p[i])的最小值作为一半就能够了
//
// 还是欠缺考虑。继续练 #include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#define ceil(a,b) (((a)+(b)-1)/(b))
#define endl '\n'
#define gcd __gcd
#define highBit(x) (1ULL<<(63-__builtin_clzll(x)))
#define popCount __builtin_popcountll
typedef long long ll;
using namespace std;
const int MOD = 1000000007;
const long double PI = acos(-1.L); const int maxn = 10008;
const int inf = 0x7f7f7f7f;
int a[maxn];
int b[maxn];
int d[maxn];
int p[maxn];
int g[maxn];
int n; void lis(int a[],int d[]){
memset(g,inf,sizeof(g));
int k;
for (int i=1;i<=n;i++){
k = lower_bound(g+1,g+n+1,a[i])-g;
d[i] = k;
g[k] = a[i];
}
} void print(int a[]){
for (int i=1;i<=n;i++){
printf("%d ",a[i]);
}
puts("");
} void init(){
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
b[n-i+1] = a[i];
}
memset(d,inf,sizeof(d));
memset(p,inf,sizeof(p));
lis(a,d);
lis(b,p);
int ans = 1;
for (int i=1;i<=n;i++){
// if (d[i]==p[n-i+1]){
// cout << i << "----" << d[i] << endl;
// ans = max(ans,d[i] * 2 - 1);
// }
ans = max(ans,min(d[i],p[n-i+1]) * 2 - 1);
}
printf("%d\n",ans);
print(d);
print(p);
} int main() {
//freopen("E:\\Code\\1.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
init();
}
return 0;
}

最新文章

  1. sqlite 数据类型
  2. c++ ado 调用存储过程并得到输出参数和返回值
  3. Android Contacts (android通讯录读取)-content provider
  4. 【第二篇】.NET用NPOI读取Excel表格并在页面预览
  5. CloudSTack4.2 查看所有虚拟机API测试
  6. jquery 幻灯片
  7. js单例模式
  8. 利用copy函数简单快速输出/保存vector向量容器中的数据
  9. Arrays类学习笔记
  10. 机器学习笔记(一)- from Andrew Ng的教学视频
  11. 部分PC端安卓管理器使用强行断开重连的方法来连接手机,容易丢书数据,损坏数据
  12. Java(多态练习 instanceof)
  13. hbuilder ios 打包失败,无法导入p12证书的解决方案
  14. 笔记:Maven 私服 Nexus 权限控制
  15. Java进阶(七)Java加密技术之非对称加密算法RSA
  16. mysql 分组内 排序
  17. 策略模式(Strategy Model)
  18. cout关闭输出缓冲,调试用
  19. oracle数据库分组之后取最大或者最小值
  20. underscore.js源码解析【集合】

热门文章

  1. 第6章 Spring MVC的数据转换、格式化和数据校验
  2. centos 80端口占用
  3. 使用asp.net 开发的一个东平人才网招聘程序
  4. Unity3d 刚体
  5. ItemArray DataRow对象的RowState和DataRowVersion属性特点
  6. 学习环境搭建1——安装python
  7. MongoDB 学习笔记(七):主从复制与副本集
  8. nginx的缓存设置提高性能
  9. python之异常处理模块
  10. JavaScript进阶【一】JavaScript模块化开发的基础知识