hdu 6197 array array array

题意:给出n,k,长度为n的数列,问是否可以删除k个使得整个数列变成递增的数列或者递减的,不是严格的(即可以为 1  3 3 4)

思路:我们求个最长的递增子序列,看是不是n-k<=(最长子序列),反之亦然

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=1e5+10;
 5 
 6 int a[N];
 7 int dp[N];
 8 int main()
 9 {
10     int t;
11     cin>>t;
12     while(t--)
13     {
14         int n,k;
15         scanf("%d%d",&n,&k);
16         for(int i=1; i<=n; i++)
17         {
18             scanf("%d",&a[i]);
19         }
20         memset(dp,127,sizeof(dp));
21         int l2=0;
22         for(int i=1; i<=n; i++)
23         {
24             int kk=upper_bound(dp+1,dp+1+n,a[i])-dp;
25             l2=max(l2,kk);
26             dp[kk]=a[i];
27         }
28         if(n-k<=l2){
29             cout<<"A is a magic array."<<endl;continue;
30         }
31         memset(dp,127,sizeof(dp));
32         int r2=0;
33         for(int i=n;i>=1;i--)
34         {
35             int kk=upper_bound(dp+1,dp+1+n,a[i])-dp;
36             r2=max(r2,kk);
37             dp[kk]=a[i];
38         }
39         if(n-k<=r2){
40              cout<<"A is a magic array."<<endl;continue;
41         }
42         cout<<"A is not a magic array."<<endl;
43     }
44 }

 

posted on 2017-09-11 15:26  hhhhx  阅读(159)  评论(0编辑  收藏  举报

导航