1.二分优化:
const int maxn = 100005;
int a[maxn];
int d[maxn];
int dp[maxn];
int main() {
me(d,0);
me(dp,0);
int len=1;
d[1]=a[1];
dp[1]=1;
for(int i=2;i<=n;i++) {
if(a[i]>d[len])d[++len]=a[i],dp[i]=len;
else {
int j=lower_bound(d+1,d+1+len,a[i])-d;
d[j]=a[i];
dp[i]=j;
}
}
return 0;
}