题目链接:array array array
题解:直接套用最长递增子序列模板。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define INF 99999999
int main()
{
int t;
scanf("%d",&t);
int dp[110000],dp2[110000];
int a[110000],b[110000],n,k,i,j;
while(t--)
{
scanf("%d%d",&n,&k);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
int l=0;
for(i=n-1; i>=0; i--)
b[l++]=a[i];
fill(dp,dp+n,INF);
for(i=0; i<n; i++)
*lower_bound(dp,dp+n,a[i])=a[i];
int max1=lower_bound(dp,dp+n,INF)-dp;
fill(dp2,dp2+n,INF);
for(i=0; i<n; i++)
*lower_bound(dp2,dp2+n,b[i])=b[i];
int max2=lower_bound(dp2,dp2+n,INF)-dp2;
if((n-max1)<=k||(n-max2)<=k)
printf("A is a magic array.\n");
else printf("A is not a magic array.\n");
}
}