array array array
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 39 Accepted Submission(s) : 12
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
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 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?
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?
Input
The 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:
A1,A2…An
.
1≤T≤20
1≤n≤105
0≤k≤n
1≤Ai≤105
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.
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[100007];
int b[100007];
int c[100007];
int main()
{
int t;
cin >> t;
int n, m;
int flag;
while (t--)
{
flag = 0;
cin >> n >> m;
memset(a, 0, sizeof(a));
memset(c, 0, sizeof(c));
for (int i = 0; i <= n; ++i)
b[i] = INT_MAX;//将b[i]初始化为最大值,为后面的lower_bound做准备
int len = 0;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
c[n - i + 1] = a[i];//将a[i]的逆序保存到c中
int pos = lower_bound(b + 1, b + n, a[i]) - b;//lower_bound返回大于等于a[i]的第一个的指针,-b后就为下标
b[pos] = a[i];
if (pos > len)
len = pos;
}
if (m >= n - len)//长度判断
flag = 1;
for (int i = 0; i <= n; ++i)
b[i] = INT_MAX;
len = 1;
for (int i = 1; i <= n; ++i)
{
int pos = lower_bound(b + 1, b + n, c[i]) - b;
b[pos] = c[i];
if (pos > len)
len = pos;
}
if (m >= n - len)//长度判断
flag = 1;
if (flag == 1)
cout << "A is a magic array." << endl;
else
cout << "A is not a magic array." << endl;
}
system("pause");
return 0;
}