HNUSTOJ-1051 最长的波动序列

 

1051: 最长的波动序列

时间限制: 1 Sec  内存限制: 128 MB
提交: 47  解决: 13
[提交][状态][讨论版]

题目描述

有一个长度为N的整数序列,序列里面的数是两两不同的,现在要在里面找一个波动序列,这个序列越长越好。

比如有波动序列{a0,a1,a2…an},则a0 > a1 < a2 > a3 < …

输入

第一行输入一个数T,代表有T个任务,T不大于50。

对于每个任务,输入格式为

N a0 a1 a2 … aN

其中N<=30000,测试数据保证序列的数两两不同。

输出

    对于每个任务,输出最长的波动序列长度

样例输入

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

样例输出

1
2
5
3
#include<iostream>
#include<cstring>
#include<cstdio>
 
using namespace std;
const int N = 30000 + 5;
int a[N];
void Solve(int n){
    int ans = 1, flag = 1, cur = a[0];
    for(int i = 1; i < n; i++){
        if(flag > 0 && cur > a[i]){
            flag *= -1;
            ans++;
        }else if(flag < 0 && cur < a[i]){
            flag *= -1;
            ans++;
        }
        cur = a[i];
    }
    printf("%d\n", ans);
}
int main(){
    int T, n;
    scanf("%d", &T);
    while(T --){
        scanf("%d", &n);
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);
        Solve( n );
    }
}
 

 

posted @ 2017-08-21 21:32  Pretty9  阅读(212)  评论(0编辑  收藏  举报