#include <iostream>
#include <vector>
using us=unsigned short;
std::pair<us,us> minmax(const std::vector<us>& vec){
std::pair<std::vector<us>,std::vector<us>> Ct_c;
for (auto&& x : vec) {
std::pair<unsigned,unsigned> left = {}, right = {Ct_c.first.size(), Ct_c.second.size()};
enum:unsigned char{none_finish,first_finish,second_finish,all_finish} state = none_finish;
while (left != right) {
if(~state&first_finish){
unsigned mid = left.first+ (right.first-left.first) / 2;
if (Ct_c.first[mid]<x)
right.first=mid;
else
left.first=mid+1;
}if(~state&second_finish){
unsigned mid = left.second+ (right.second-left.second) / 2;
if (Ct_c.second[mid]<x)
left.second=mid+1;
else
right.second=mid;
}
state=decltype(state)((left.first==right.first)|(left.second==right.second)<<1);
}
if (left.first==Ct_c.first.size())
Ct_c.first.push_back(x);
else
Ct_c.first[left.first]=x;
if (left.second==Ct_c.second.size())
Ct_c.second.push_back(x);
else
Ct_c.second[left.second]=x;
}
return {Ct_c.first.size(), Ct_c.second.size()};
}
int main(){
std::vector<us> highs(100000);
for(us i=0;i<highs.size();i++){
std::cin>>highs[i];
if(std::cin.get()=='\n'){
highs.erase(highs.begin()+i+1,highs.end());
break;
}
}
auto pair=minmax(highs);
std::cout<<pair.first<<std::endl<<pair.second<<std::endl;
}
不知道哪里出现了问题,在我普通随机测试时没出现任何问题,多出来的时间花在了哪?