HUD 5256 序列变换

来源:互联网 发布:c 程序员职业寿命 编辑:程序博客网 时间:2024/05/16 15:36
这题就是LIS的变形,很好的题
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxm=1e5+10;int dp[maxm];int a[maxm];int n;int len;int main(){    int t;    int k=1;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int i;        for(i=1; i<=n; i++)        {            scanf("%d",&a[i]);            a[i]-=i;        }        dp[1]=a[1];        len=1;        int j;        for(i=2; i<=n; i++)        {            if(dp[len]<=a[i])            {                dp[++len]=a[i];            }            else            {                j=upper_bound(dp+1,dp+len+1,a[i])-dp;                dp[j]=a[i];            }        }        printf("Case #%d:\n",k++);        printf("%d\n",n-len);    }    return 0;}

0 0