HDU - 5256 序列变换 (LIS转化)_#define

 

HDU - 5256 序列变换 (LIS转化)_#define_02




#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<map>
#include<queue>
#include<stack>
#define INF 0x3f3f3f3f
#define ull unsigned lonb long
#define ll long long
#define IN __int64
#define N 1000010
#define M 1000000007
using namespace std;
int a[N];
int main()
{
	int T=1,t,n,m,i,j;
	int top;
	int l,r,mid;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		memset(a,0,sizeof(a));
		top=0;a[0]=-INF;
		for(i=1;i<=n;i++)
		{
			scanf("%d",&m);
			m-=i;
			if(m>=a[top])
				a[++top]=m;
			else
			{
				l=1;r=top;
				while(l<=r)
				{
					mid=(l+r)/2;
					if(m>=a[mid])
						l=mid+1;
					else
						r=mid-1;
				}
				a[l]=m;
			}
		}
		printf("Case #%d:\n%d\n",T++,n-top);
	}
	return 0;
}