LIS hdu 5748 (Bellovin)

来源:互联网 发布:淘宝联盟电脑版 编辑:程序博客网 时间:2024/04/30 16:56

Bellovin


题意:给出序列a[ ],求f[ ],f[i]指到i最小LIS。

题解:LIS变形,设定一个数组b[ ],每查找一次,把a[i]加入b[ j],j为找到的子序列长度。
<span style="font-size:18px;">#include<cstdio>#include<algorithm>#define INF 0x3f3f3f3fusing namespace std;int main(){int t,n,i,a[100100],b;int s[100100];scanf ("%d",&t);while (t--){scanf ("%d",&n);for (i=0;i<n;i++){scanf ("%d",&a[i]);s[i]=INF;//初始化}for (i=0;i<n;i++){b=lower_bound(s,s+n,a[i])-s;//截止a[i]的LCS长度printf ("%d",b+1);//求字典序,需要+1if (i!=n-1)printf (" ");s[b]=a[i];//a[i]加入s数组,便于下一次查找}printf ("\n");}return 0;} </span>


0 0
原创粉丝点击