用户ID: 密码: 验证:

登 录

注 册 取回密码

中山教育

中山国际网

中国教育在线

时代财富科技公司 FortuneAge Technology Co., Ltd. 校园博客客服网站(新)

我的资料

Mpq

博客信息

积分:988
等级:4级 lv 4
日志总数:231
发表评论总数:18 ( 查看)
获得评论总数:21
发表留言总数:0
所属学校:三鑫
收藏本站:

最新公告

欢迎光临我的博客!

最新相册

我的日历

最新评论

--游客
好文好文,是您的手笔?如果是您的文章,如果您愿意和我联系,...
还有就是数学不能使用计算器…….......在读初中之前原...
--Mpq
这次似乎不举行冬季长跑……看来在三鑫参加的体育项目最终是以...
--Mpq
看了你的"总结", 挺有针对性的! 相信下学期你一定会有...

RSS


首页 -> 其他题的题库->Wavio Sequence
Wavio Sequence

Wavio Sequence

Wavio数列由一连串的整数构成的。他有一些有趣的特性。

  • 他的长度一定是奇数,也就是 L= 2*n+1
  • Wavio数列中的前 n+1个整数为严格递增。
  • Wavio数列中的后 n+1个整数为严格递减。
  • Wavio数列中没有相邻的2个数是一样的。

例如:1, 2, 3, 4, 5, 4, 3, 2, 0是一个长度为 9 Wavio数列。但是1, 2, 3, 4, 5, 4, 3, 2, 2不是一个Wavio数列。在这个问题中,给你一连串的整数,请你找出在这些整数中你可以找到的一个子字串为Wavio数列的最大长度是多少?例如在以下一连串的整数:

1 2 3 2 1 2 3 4 3 2 1 5 4 1 2 3 2 2 1

最长的Wavio数列是:1 2 3 4 5 4 3 2 1,所以应该输出 9

Input Wavio.in 

输入含有多组测试资料

每组测试资料以1个正整数N1 <= N <= 10000)开始,代表给你整数的数目。从下一列开始有N个整数。请参考Sample Input

Output Wavio.out

对每组测试资料请输出一列 。在输入的一连串的整数,请你找出在这些整数中你可以找到的Wavio数列最大的长度是多少。

Sample Input

Sample Output

10

1 2 3 4 5 4 3 2 1 10

19

1 2 3 2 1 2 3 4 3 2 1 5 4 1 2 3 2 2 1

5

1 2 3 4 5

20

13 7 5 7 6 7 2 7 3 20 9 9 15 20 9 10 12 12 4 13

9

9

1

7

 
 
 
Program Wavio_Mpq;
Const Maxn=10000;
type data=array[0..Maxn] of integer;
var
  n:integer;
  a,f,up,down:data;
procedure init;
var
  i:integer;
begin
  readln(n);
  for i:=1 to n do read(a[i]);
  readln;
end;
function Lis(var ans:data):data;
var
  i,m,min,max,len:integer;
begin
  len:=0;
  fillchar(f,sizeof(f),0);
  for i:=1 to n do
  begin
    min:=1; max:=len;
    while min<=max do
    begin
      m:=(Min+Max) div 2;
      if f[m]<a[i] then min:=m+1 else
      if f[m]>a[i] then max:=m-1 else
      begin
        min:=m;
        break;
      end;
    end;
    f[min]:=a[i];
    if min>len then len:=min;
    ans[i]:=min;
  end;
  exit(ans);
end;
function Min(a,b:integer):integer;
begin
  if a<b then exit(a) else exit(b);
end;
function Max(a,b:integer):integer;
begin
  if a>b then exit(a) else exit(b);
end;
procedure Dp;
var
  i,answer:integer;
begin
  up:=Lis(up);
  for i:=1 to n div 2 do
  begin
    a[0]:=a[i];
    a[i]:=a[n-i+1];
    a[n-i+1]:=a[0];
  end;
  down:=Lis(down);
  answer:=0;
  for i:=1 to n do
    answer:=Max(2*Min(up[i],down[n-i+1])-1,answer);
  writeln(answer);
end;
begin
assign(input,'Wavio.in'); reset(input);
assign(output,'Wavio.out'); rewrite(output);
  while Not eof do
  begin
    init;
    Dp;
  end;
close(input); close(output);
end.

网友评论

共 0 页,0 条记录  

用户名:
密码:
您的评论:
正在载入编辑器...
请输入验证码:


发 表 评 论

Mpq-中山教师家园