[hdu 5532] [2015ACM/ICPC亚洲区长春站 ] Almost Sorted Array 最长不下降子序列
2016-04-21 08:49
363 查看
Almost Sorted Array
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1917 Accepted Submission(s): 494
Problem Description
We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, insertion sort, selection sort, bubble sort, etc. But sometimes it is an overkill to use these algorithms for an almost sorted array.
We say an array is sorted if its elements are in non-decreasing order or non-increasing order. We say an array is almost sorted if we can remove exactly one element from it, and the remaining array is sorted. Now you are given an array a1,a2,…,an, is it almost sorted?
Input
The first line contains an integer T indicating the total number of test cases. Each test case starts with an integer n in one line, then one line with n integers a1,a2,…,an.
1≤T≤2000
2≤n≤105
1≤ai≤105
There are at most 20 test cases with n>1000.
Output
For each test case, please output “
Sample Input
3
3
2 1 7
3
3 2 1
5
3 1 4 1 5
Sample Output
YES
YES
NO
Source
2015ACM/ICPC亚洲区长春站-重现赛(感谢东北师大)
题目链接;http://acm.hdu.edu.cn/showproblem.php?pid=5532
题意;问给定序列去掉一个数后是否构成不下降|不上升的序列
思路;正向|反向作最长不下降子序列(nlogn的做法);
如果len==n||len==n-1输出“Yes”;
代码;
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1917 Accepted Submission(s): 494
Problem Description
We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, insertion sort, selection sort, bubble sort, etc. But sometimes it is an overkill to use these algorithms for an almost sorted array.
We say an array is sorted if its elements are in non-decreasing order or non-increasing order. We say an array is almost sorted if we can remove exactly one element from it, and the remaining array is sorted. Now you are given an array a1,a2,…,an, is it almost sorted?
Input
The first line contains an integer T indicating the total number of test cases. Each test case starts with an integer n in one line, then one line with n integers a1,a2,…,an.
1≤T≤2000
2≤n≤105
1≤ai≤105
There are at most 20 test cases with n>1000.
Output
For each test case, please output “
YES” if it is almost sorted. Otherwise, output “
NO” (both without quotes).
Sample Input
3
3
2 1 7
3
3 2 1
5
3 1 4 1 5
Sample Output
YES
YES
NO
Source
2015ACM/ICPC亚洲区长春站-重现赛(感谢东北师大)
题目链接;http://acm.hdu.edu.cn/showproblem.php?pid=5532
题意;问给定序列去掉一个数后是否构成不下降|不上升的序列
思路;正向|反向作最长不下降子序列(nlogn的做法);
如果len==n||len==n-1输出“Yes”;
代码;
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; int a[100005]; int ans[100005]; int b[100005]; int inf=99999999; int n; int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); b[n-i+1]=a[i]; ans[i]=inf; } int len=0; for(int i=1;i<=n;i++) { int pos=upper_bound(ans+1,ans+1+n,a[i])-ans; ans[pos]=a[i]; } int pos=lower_bound(ans+1,ans+1+n,inf)-ans; if(pos==n||pos==n+1) { printf("YES\n"); continue; } for(int i=1;i<=n;i++) ans[i]=inf; for(int i=1;i<=n;i++) { pos=upper_bound(ans+1,ans+1+n,b[i])-ans; ans[pos]=b[i]; } pos=lower_bound(ans+1,ans+1+n,inf)-ans; if(pos==n||pos==n+1) { printf("YES\n"); continue; } printf("NO\n"); } }
相关文章推荐
- C++实验4-求1000以内所有偶数的和
- 第四次上机实验报告
- js实现的省市联动
- android基础---->音频和视频的使用
- 053(四十)
- 第十二章 、Bitmap的加载和Cache
- java 生成pdf文档
- 有关QTimer线程安全的探讨
- LeetCode|Implement Stack using Queues
- 053(三十九)
- 第十一章、Android的线程和线程池
- 第七周项目1-成员函数、友元函数和一般函数有区别
- 圆形进度条,可设置内外环,多彩
- 053(三十八)
- Windows Server 2012 云硬盘如何挂载
- 第十章、Android的消息机制
- String,StringBuffer和StringBuilder的区别
- C++实验-4
- 让我们一起来做最漂亮的Android界面吧!
- 053(三十七)