
手动维护一个数组模拟即可,233……
可以使用algorithm中的lower_bound(相当于二分)
代码如下:
#include<cstdio> #include<algorithm> using namespace std; int a[1000000],tot,n,x; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); if(x>a[tot]) a[++tot]=x; else { int nd=lower_bound(a,a+tot+1,x)-a;a[nd]=x; } } printf("%d\n",tot); for(int i=1;i<=tot;i++) printf("%d ",a[i]); return 0; }