呵呵手写二分果然功能很多,想清楚自己要找的是什么就可以了。
#includeusing namespace std;typedef long long ll;const int INF=0x3f3f3f3f;int n;int a[100005];int dp[50005];int f1(int *dp,int a){ int l=1,r=n; while(1){ int m=(l+r)>>1; if(m==l){ if(dp[l] >1; if(m==l){ if(dp[l]>=a) return l; else return r; } if(dp[m]>=a){ r=m; } else{ l=m+1; } } return -1;}int main(){ n=0; int t; while(~scanf("%d",&t)){ n++; a[n]=t; } memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ int id=f1(dp,a[i]); //cout<<"id="< <