思路:第一問求 最長不升子序列 ,第二問求 最長上升子序列
#include <bits/stdc++.h>
#include <map>
using namespace std;
typedef long long ll;
map<ll,ll> mp;
ll a[100100],n,ans1[100100],ans2[100100];
ll len1,len2;
queue<ll> q;
int main()
{
int i=0,n,m;
while(cin>>a[++i]);
n=m=i-1;
len1=len2=1;
ans1[1]=ans2[1]=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]<=ans1[len1])
ans1[++len1]=a[i];
else
{
int pos=upper_bound(ans1+1,ans1+len1+1,a[i],greater<int>())-ans1;
ans1[pos]=a[i];
}
if(a[i]>ans2[len2])
ans2[++len2]=a[i];
else
{
int pos=lower_bound(ans2+1,ans2+len2+1,a[i])-ans2;
ans2[pos]=a[i];
}
}
cout<<len1<<endl<<len2<<endl;
return 0;
}