#include <bits/stdc++.h>
using namespace std;
int lowerbound(const vector<int>& arr,int target){
int left=0,right=arr.size(),result;
while (left<right){
int mid=(left+right)>>1;
if (arr[mid]<target){
result=mid;
right=mid-1;
}
else left=mid+1;
}
return result;
}
int upperbound(const vector<int>& arr,int target){
int left=0,right=arr.size(),result;
while (left<right){
int mid=(left+right)>>1;
if (arr[mid]>=target){
result=mid;
right=mid-1;
}
else left=mid+1;
}
return result;
}
int main(){
int num;
vector<int> h,g(1,-2e9),p(1,2e9);
while (cin>>num){
h.push_back(num);
if (cin.peek()=='\n') break;
}
if (h.empty()) return 0;
for (int i=0;i<h.size();i++){
if (h[i]<=g.back()) g.push_back(h[i]);
else g[lowerbound(g,h[i])]=h[i];
}
cout<<g.size()<<endl;
for (int i=0;i<h.size();i++){
if (h[i]>p.back()) p.push_back(h[i]);
else p[upperbound(p,h[i])]=h[i];
}
cout<<p.size()<<endl;
return 0;
}
我感觉自己思路没错,但交了全WA,help