Live2d Test Env

HDU - 6197:array array array (简单LIS)

One day, Kaitou Kiddo had stolen a priceless diamond ring. But detective Conan blocked Kiddo's path to escape from the museum. But Kiddo didn't want to give it back. So, Kiddo asked Conan a question. If Conan could give a right answer, Kiddo would return the ring to the museum.
Kiddo: "I have an array A and a number k , if you can choose exactly k elements from A and erase them, then the remaining array is in non-increasing order or non-decreasing order, we say A is a magic array. Now I want you to tell me whether A is a magic array. " Conan: "emmmmm..." Now, Conan seems to be in trouble, can you help him?

InputThe first line contains an integer T indicating the total number of test cases. Each test case starts with two integers n and k in one line, then one line with n integers: ,n  A1,A2…An .
1T20 1≤T≤20
1n10 5  1≤n≤105
0k0≤k≤n
110 5  1≤Ai≤105
OutputFor each test case, please output "A is a magic array." if it is a magic array. Otherwise, output "A is not a magic array." (without quotes).
Sample Input

3
4 1
1 4 3 7
5 2
4 1 3 1 2
6 1
1 4 3 5 4 6

Sample Output

A is a magic array.
A is a magic array.
A is not a magic array.
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=100010;
int a[maxn],b[maxn];
int main()
{
    int T,N,K,cnt,pos;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&N,&K);
        rep(i,1,N) scanf("%d",&a[i]);
        cnt=0;
        rep(i,1,N) pos=upper_bound(b+1,b+cnt+1,a[i])-b,b[pos]=a[i],cnt=max(pos,cnt);
        if(cnt+K>=N) puts("A is a magic array.");
        else {
            reverse(a+1,a+N+1);
            cnt=0;
            rep(i,1,N) pos=upper_bound(b+1,b+cnt+1,a[i])-b,b[pos]=a[i],cnt=max(pos,cnt);
            if(cnt+K>=N) puts("A is a magic array.");
            else puts("A is not a magic array.");
        }
    }
    return 0;
}

 

posted @ 2018-10-19 09:11  nimphy  阅读(149)  评论(0编辑  收藏  举报