第一问全部AC,但第二问全WA
#include <bits/stdc++.h>
using namespace std;
int n=1,h[100005],si[100005],sn[100005],tp=0,ui[100005],un[100005];
bool cmp(const int &val,const int &e)
{
return e<val;
}
int main()
{
while(cin>>h[n])n++;
n--;
sn[0]=0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
if(sn[tp]>=h[i])
{
sn[++tp]=h[i];
si[tp]=i;
}
else
{
int tmp=upper_bound(sn+1,sn+tp+1,h[i],cmp)-sn;
sn[tmp]=h[i];
si[tmp]=i;
}
}
cout<<tp<<endl;
tp=0;
for(int i=1;i<=n;i++)
{
if(un[tp]<h[i])
{
un[++tp]=h[i];
ui[tp]=i;
}
else
{
int tmp=upper_bound(un+1,un+tp+1,h[i])-un;
un[tmp]=h[i];
ui[tmp]=i;
}
}
cout<<tp<<endl;
return 0;
}