思路:第一问求 最长不升子序列 ,第二问求 最长上升子序列
#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;
}