链接: https://vjudge.net/problem/UVA-11039
题意:有n个绝对值各不相同的非0整数,选出尽量多的书,排成一个序列,使得正负号交替,且绝对值递增。输入n(1<=n<5e5)和n个整数,输出最长的序列长度。
分析:贪心
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <sstream>
#include <string>
#include <set>
using namespace std;
#define mem(a,n) memset(a,n,sizeof(a))
typedef long long LL;
const LL mod=1e9+7;
const double eps=1e-6;
const LL INF=0x3f3f3f3f;
const int N=5e5+5;
struct Node
{
int abte,x;
bool operator < (const Node& m)const
{
return abte<m.abte;
}
} p[N];
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&p[i].x);
p[i].abte=abs(p[i].x);
}
sort(p,p+n);
int ans=1,tmp=p[0].x;
for(int i=1; i<n; i++)
{
if(tmp<0)
{
while(i<n&&p[i].x<0) i++;
}
else
{
while(i<n&&p[i].x>0) i++;
}
if(i<n)
{
ans++;
tmp=p[i].x;
}
}
printf("%d\n",ans);
}
return 0;
}