hdu6197 array array array【英文题】

来源:互联网 发布:十天javascript韩顺平 编辑:程序博客网 时间:2024/05/21 15:45

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6197
题意:给你一个长度为n的数组,如果能从这个数组里删除k个元素,使得这个数组成为不严格的单调递增序列,或不严格单调递减序列,那么这个数组就是魔法数组,否则就不是
解析:其实看懂了题真的挺好做的,看不懂那就连样例都看不懂了,对于这题,对于递增的情况来说,求他的最长上升子序列的长度,判断他的长度+k是否大于等于n,如果小于n的话,就算拿走k个元素,还是不符合魔法数组,对于递减情况来说是一样的

#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+100;const int inf = 0x7fffffff;int dp[maxn];int a[maxn];int main(void){    int t;    scanf("%d",&t);    while(t--)    {        int n,k;        scanf("%d %d",&n,&k);        for(int i=0;i<n;i++)            scanf("%d",&a[i]);        fill(dp,dp+n,inf);        for(int i=0;i<n;i++)            *lower_bound(dp,dp+n,a[i]) = a[i];        int t1 = lower_bound(dp,dp+n,inf)-dp;        fill(dp,dp+n,inf);        for(int i=n-1;i>=0;i--)            *lower_bound(dp,dp+n,a[i]) = a[i];        int t2 = lower_bound(dp,dp+n,inf)-dp;        n -= k;        if(t1>=n || t2>=n)            puts("A is a magic array.");        else            puts("A is not a magic array.");    }    return 0;}