HDU 6197 array array array (2017瀋陽網賽- 最長上升子序列)
阿新 • • 發佈:2018-12-24
題意:
告訴你n 個數, 問你是否去掉k 個數後, 原序列變成非嚴格遞增序列或者非嚴格遞減序列。
思路:
顯然求一遍LIS , 倒過來在求一邊LIS, 比較ans 和 k 的關係即可。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int T; const int maxn = 100000 + 10; int a[maxn], c[maxn]; int main(){ scanf("%d",&T); while(T--){ int n, k; scanf("%d %d",&n, &k); for (int i = 0; i < n; ++i){ scanf("%d", a+i); } int cnt = 0; int ans = 0; for (int i = 0; i < n; ++i){ int p = upper_bound(c, c + cnt, a[i]) - c; if (p == cnt){ c[cnt++] = a[i]; ans = max(ans, cnt); } else { c[p] = a[i]; } } cnt = 0; for (int i = n-1; i >= 0; --i){ int p = upper_bound(c, c + cnt, a[i]) - c; if (p == cnt){ c[cnt++] = a[i]; ans = max(ans, cnt); } else { c[p] = a[i]; } } // printf("ans = %d\n", ans); if (n - k <= ans){ puts("A is a magic array."); } else { puts("A is not a magic array."); } } return 0; }
array array array
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 219 Accepted Submission(s): 131
Problem Description 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
Input The first line contains an integer T indicating the total number of test cases. Each test case starts with two integers n
1≤T≤20
1≤n≤105
0≤k≤n
1≤Ai≤105
Output For 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.
Source
Recommend liuyiding | We have carefully selected several similar problems for you: 6205 6204 6203 6202 6201