ICPC2017沈阳网赛1004&&HDU6197 (LIS
来源:互联网 发布:nodejs ubuntu 编辑:程序博客网 时间:2024/04/29 02:36
array array array
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?
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
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.
题意
就是问你数组内最长上升或者下降子序列+k与n的关系
AC代码
#include <bits/stdc++.h>using namespace std;const int MAXN = 1e6+10;int arr[MAXN], brr[MAXN];int n, k;int Search(int num, int low, int high){ int mid; while(low <= high) { mid = (low+high) / 2; if(num >= brr[mid]) low = mid+1; else high = mid-1; } return low;}int Dp(){ int len, pos; brr[1] = arr[1]; len = 1; for(int i = 2;i <= n; i++) { if(arr[i] >= brr[len]) { len ++; brr[len] = arr[i]; } else { pos = Search(arr[i], 1, len); brr[pos] = arr[i]; } } return len;}int Dp1(){ int len, pos; brr[1] = arr[1]; len = 1; for(int i = 2;i <= n; i++) { if(arr[i] <= brr[len]) { len ++; brr[len] = arr[i]; } else { pos = Search(arr[i], 1, len); brr[pos] = arr[i]; } } return len;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); for(int i = 1; i <= n; i++) scanf("%d",&arr[i]); int zz = Dp()+k; int kk = Dp1()+k; if(zz>=n || kk >+ n) puts("A is a magic array."); else puts("A is not a magic array."); }return 0;}
- ICPC2017沈阳网赛1004&&HDU6197 (LIS
- ICPC2017南宁邀请赛1004&&HDU6197 (贪心
- ICPC2017沈阳网赛1005&&HDU6198 (矩阵快速幂
- 【2017沈阳网络赛】1004 hdu6197 array array array 最长不下降子序列
- ICPC2017沈阳赛区游记
- ICPC2017南宁邀请赛1005&&HDU6197 (模拟
- ICPC2017网络赛(沈阳)number number number
- hdu6197 array array array LIS
- ICPC2017网络赛(沈阳)1005&HDU6198 number (矩阵+快速幂)
- ICPC2017网络赛(沈阳)1008&HDU6201transaction(spfa 费用流)
- ICPC2017网络赛(沈阳)1012&HDU6205Card(最大子段和)
- ICPC2017网络赛(沈阳)1008 transaction transaction transaction——树形DP
- hdu6197 最长上升子序列(LIS)长度
- 2017年沈阳网赛
- ACM-ICPC2017北京网络赛(I) Minimum
- ICPC2017北京现场赛H Puzzle Game
- hdu5455 Fang Fang(沈阳网赛)
- 2015 ICPC 沈阳网赛 解题报告
- 属性动画____简化认识
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- Lucene学习总结之四:Lucene索引过程分析(1)
- 速来围观!苹果新品发布会倒计时1天,哪些点值得期待?
- MyBatis动态sql小结(三)
- ICPC2017沈阳网赛1004&&HDU6197 (LIS
- Android studio导入官网sdk运行demo报错问题解决
- 微信开发返回【470001】错误
- bcb中查杀进程的方法
- java简单解析XML串中的内容
- C++学习笔记(2)-类
- ubuntu core 安装教程
- LeetCode 11. Container With Most Water
- 【python】【leetcode】【算法题目64—Minimum Path Sum】