二分一直不怎么会写,求大佬指点
#include<bits/stdc++.h>
using namespace std;
int p[100005];
int x[100005];
int s=0;//系统数
int mx=0;//最高可拦截的高度
int ss[100005];
//这里是第二问二分代码
void f(int n){
//cout<<n<<"\n";
int l=1,r=s;
int mid;
while(l<=r){
mid=(l+r)/2;
//cout<<l<<" "<<mid<<" "<<r<<"\n";
if(x[mid]>=n) r=mid-1;
else l=mid+1;
//getchar();
}
x[mid]=n;
if(mid==s) mx=n;
}
int main(){
int sum=0;
int n;
while(cin>>n){
sum++;
p[sum]=n;
}
//for(int i=1;i<=sum;i++)cout<<p[i]<<" ";
//cout<<"\n";
for(int i=1;i<=sum;i++){
if(mx<p[i]){
s++;
x[s]=p[i];
mx=p[i];
}
else{
f(p[i]);
}
//cout<<p[i]<<" "<<s<<" "<<mx<<"\n";
//for(int j=1;j<=s;j++)cout<<x[j]<<" ";
//cout<<"\n";
}
//第一问代码在后面
ss[sum]=1;
for(int i=sum-1;i>=1;i--){
ss[i]=1;
for(int j=i+1;j<=sum;j++){
if(p[i]>=p[j])ss[i]=max(ss[i],ss[j]+1);
}
}
//for(int i=1;i<=sum;i++)cout<<ss[i]<<" ";
//cout<<"\n";
sort(ss+1,ss+1+sum);
cout<<ss[sum]<<"\n";
cout<<s<<"\n";
}