zoukankan      html  css  js  c++  java
  • 序列变换 HDU

    #include<cstdio>
    #include<algorithm>
    #include<string.h>
    #include<stdlib.h>
    using namespace std;
    typedef long long LL;
    const int maxn = 1e5 + 5;
    const int inf = 1e6 + 5;
    int a[maxn],d[maxn];
    int main()
    {
    	int T,n;
    	scanf("%d",&T);
    	for(int cas=1; cas<=T; cas++)
    	{
    		scanf("%d",&n);
    		printf("Case #%d:
    ",cas);
    		for(int i=1; i<=n; i++)
    		{
    			scanf("%d",&a[i]);
    			a[i]-=i;
    		}
    		memset(d,0x3f,sizeof(d));
    		int t=1;
    		d[0]=-d[0];  //把长度为0的结尾赋值为无穷小,不然会从0更新,这样明显不符合原理
    		d[1]=a[1];
    		for(int i=2; i<=n; i++)
    		{
    			if(d[t]<=a[i])
    				d[++t]=a[i];  //如果a[i]大于当前最长的上升子序列的结尾时,直接加在这个序列后面并且长度加1
    			else if(d[t]>a[i])//最长上升子序列结尾的数字 大于 a[i] 
    			{
    				int pos=upper_bound(d,d+n,a[i])-d;//找到第一个大于a[i]的位置,把它改成a[i](使子序列结尾尽可能小)
    				d[pos]=a[i];
    			}
    		}
    		printf("%d
    ",n-t);
    	}
    	return 0;
    }
    
  • 相关阅读:
    (转)静态方法与实例方法
    使用C#和Excel进行报表开发(8)
    js千分位
    各种语言多态性比较
    中国互联网100个Web2.0网站名单
    HDU4405 期望
    HDU1266 字符串逆转
    POJ1087 DInic
    POJ1003 水~
    HDU4403 DFS
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12844065.html
Copyright © 2011-2022 走看看