杭电5532 Almost Sorted Array
2015-12-08 22:00
323 查看
Almost Sorted Array
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1324 Accepted Submission(s): 396
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亚洲区长春站-重现赛(感谢东北师大)
扣掉一个数能不能让数列成为非递减或者非递增,upper_bound正着一次,反着一次就行了:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[110000],i,j,k,l,m,n,help[110000],top; int main() { scanf("%d",&k); while(k--) { top=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); help[top]=a[0]; for(i=1;i<n;i++) { if(a[i]>=help[top]) help[++top]=a[i]; else { int t=upper_bound(help,help+top,a[i])-help; help[t]=a[i]; } } if(n-top<=2) { printf("YES\n"); continue; } top=0; help[top]=a[n-1]; for(i=n-2;i>=0;i--) { if(a[i]>=help[top]) help[++top]=a[i]; else { int t=upper_bound(help,help+top,a[i])-help; help[t]=a[i]; } } if(n-top<=2) printf("YES\n"); else printf("NO\n"); } }
相关文章推荐
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- STL与泛型编程(1)---模板
- CppUtest发现的STL容器内存泄漏问题
- STL中算法
- STL简单应用
- vector-list-deque
- 一道2年级数学题 10人做9人错
- HDU-1163Eddy's digital Roots