uva11039

来源:互联网 发布:淘宝 中药材 真假 编辑:程序博客网 时间:2024/06/05 17:23

题目大意:
求正负交错且绝对值递增的最长序列

思路:
本来想说分成两个正负数组,然后有点类似归并排序的那种思想,可是发现好混乱。
后来看见人家是做标记的。。。太简单了。。

代码:

#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <algorithm>int a[500000];int cmp(int a,int b) {    return abs(a) < abs(b);}int main() {    int n;    int num;    int x;    int z,f;    scanf("%d",&n);    while(n--) {        z= 0; f = 0;        scanf("%d",&num);        for(int i = 0; i < num; i++)             scanf("%d",&a[i]);        sort(a,a+num,cmp);        int cnt = 1;        int flag;        if(a[0] < 0 )            flag = -1;        else            flag = 1;        for(int i = 1 ; i < num; i++) {            if(a[i] * flag < 0) {                cnt++;                flag = flag * -1;            }        }        printf("%d\n",cnt);    }       return 0;}
0 0