求助!!调了很久也只有86分
#include<bits/stdc++.h>
using namespace std;
long long n,h[100005],in[100005],ans=1,cnt,vis[100005],pd,cmp,num;
int main()
{
while(cin>>in[ans])
{
ans++;
}
reverse(in+1,in+ans);
// for(int i=1;i<=ans;i++)
// {
// cout<<in[i]<<" ";
// }
// cout<<endl;
while(num<ans)
{
cnt=0,cmp++;
memset(h,0,sizeof(h));
for(int i=1;i<ans;i++)
{
if(vis[i]==1)
{
continue;
}
if(i==1)
{
h[++cnt]=in[i];
continue ;
}
if(h[cnt]<=in[i])
{
h[++cnt]=in[i];
continue ;
}
long long p=(upper_bound(h+1,h+cnt+1,in[i])-h);
h[p]=in[i];
}
if(cmp==1)
{
cout<<cnt<<endl;
}
for(int i=1;i<=cnt;i++)
{
vis[h[i]]=1;
}
num+=cnt;
}
cout<<cmp;
return 0;
}