题意:
按照绝对值大小从小到大,且必须正负值间隔,问最长序列的长度
思路:
有flag控制正负间隔,排序是按照绝对值排序
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int a[500005];
int cmp(int a, int b) {
return abs(a) > abs(b);
}
int main() {
int kase;
scanf("%d", &kase);
while(kase--) {
int n, flag, ans=1;
scanf("%d", &n);
for(int i=0; i<n; i++) {
scanf("%d", &a[i]);
}
sort(a, a+n,cmp);
if(a[0] > 0) flag=1;
else flag = 0;
for(int i=1; i<n; i++) {
if(flag) {
if(a[i]<0) {
flag=0;
ans++;
}
}
else {
if(a[i]>0) {
flag=1;
ans++;
}
}
}
printf("%d\n", ans);
}
return 0;
}