hdu 6197 array array array

来源:互联网 发布:java 打印map 编辑:程序博客网 时间:2024/06/17 03:11

经典的dp正着来个最长上升子序列,反着来个最长上升子序列,结束

#include<bits\stdc++.h>using namespace std;typedef long long ll;#define pb push_backint INF=1e9+7;const int mod=1e9+7;int n,m;int x;int g[100005],g1[100005],a[100005];int main(){    int t,k,y;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&k);        int ans=0;        int ans1=0;        for(int i=1; i<=n; i++)g[i]=INF,g1[i]=INF;        for(int i=1; i<=n; i++)        {            scanf("%d",&a[i]);        }        for(int i=1;i<=n;i++)        {            x=a[i];            y=a[n-i+1];             if(i==1)g[i]=x,g1[i]=y;            else            {                int j=lower_bound(g+1,g+1+n,x)-g;                int j1=lower_bound(g1+1,g1+1+n,y)-g1;                if(g[j]==x)j++;                if(g1[j1]==y)j1++;                g[j]=x;                g1[j1]=y;                ans=max(ans,j);                ans1=max(ans1,j1);            }        }        if(n-ans<=k||n-ans1<=k)            printf("A is a magic array.\n");        else        {            printf("A is not a magic array.\n");        }    }    return 0;}