最长上升子序列
以下是修复后代码,求解释:
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
int r(){
char c=48;int X=0;
while(X=(X<<3)+(X<<1)+(c^48),isdigit(c=getchar()));
return X;
}
int d[100001],n=r();
int main(){
while(d[(d[-1]=r())>d[d[0]]?++d[0]:std::lower_bound(d+1,d+d[0]+1,d[-1])-d]=d[-1],--n);
printf("%d",d[0]);
}