~~~~
求最长不上升子序列,把数组倒过来不就是求最长上升子序列了么,QAQ..
用的是nlogn算法,不清楚的请戳:http://blog.csdn.net/darwin_/article/details/38360997
题目链接:http://poj.org/problem?id=1887
~~~~
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 10000
using namespace std;
int f[N],a[N];
int main()
{
int t,c,T=0;
while(~scanf("%d",&t),t!=-1)
{
c=0;
a[c++]=t;
while(~scanf("%d",&t),t!=-1)
a[c++]=t;
int i,j;
for(i=0,j=c-1;i<j;i++,j--)
swap(a[i],a[j]);
int cnt=0;
for(int k=0;k<c;k++)
{
if(k==0) f[++cnt]=a[k];
else
{
if(a[k]>f[cnt]) f[++cnt]=a[k];
else
{
int pos=lower_bound(f+1,f+cnt,a[k])-f;
f[pos]=a[k];
}
}
}
printf("Test #%d:\n",++T);
printf(" maximum possible interceptions: %d\n\n",cnt);
}
return 0;
}