题目大意:
求正负交错且绝对值递增的最长序列
思路:
本来想说分成两个正负数组,然后有点类似归并排序的那种思想,可是发现好混乱。
后来看见人家是做标记的。。。太简单了。。
代码:
#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;
}