hdu5532Almost Sorted Array
来源:互联网 发布:淘宝怎么买岛国资源 编辑:程序博客网 时间:2024/06/06 05:43
Almost Sorted Array
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 850 Accepted Submission(s): 297
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 arraya1,a2,…,an , is it almost sorted?
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
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 withn>1000 .
There are at most 20 test cases with
Output
For each test case, please output "`YES`" if it is almost sorted. Otherwise, output "`NO`" (both without quotes).
Sample Input
332 1 733 2 153 1 4 1 5
Sample Output
YESYESNO
Source
2015ACM/ICPC亚洲区长春站-重现赛(感谢东北师大)
#include<bits/stdc++.h>const int maxn=110000;int n,a[maxn];bool b[maxn];bool c[maxn];void doit(){ scanf("%d",&n);b[1]=c[1]=1; for(int i=1;i<=n;i++){ scanf("%d",a+i); if(i>1&&a[i]>=a[i-1]&&b[i-1])b[i]=1;else if(i>1) b[i]=0; if(i>1&&a[i]<=a[i-1]&&c[i-1])c[i]=1;else if(i>1)c[i]=0; } // for(int i=1;i<=n;i++)printf("b[%d]=%d c[%d]=%d\n",i,b[i],i,c[i]); if(n<=3||b[n]||c[n]||b[n-1]||c[n-1]){puts("YES");return;} b[0]=c[0]=b[n]=c[n]=1; for(int i=n-1;i;i--){ if(i>1&&b[i+1]&&b[i-1]&&a[i-1]<=a[i+1]){puts("YES");return;} if(i>1&&c[i+1]&&c[i-1]&&a[i-1]>=a[i+1]){puts("YES");return;} if(a[i+1]>=a[i]&&b[i+1])b[i]=1;else b[i]=0; if(a[i+1]<=a[i]&&c[i+1])c[i]=1;else c[i]=0; } if(b[2]||c[2]){puts("YES");return;} puts("NO");}int main(){ int t;scanf("%d",&t); for(int i=1;i<=t;i++)doit(); return 0;}
0 0
- hdu5532Almost Sorted Array
- hdu5532Almost Sorted Array(长春现场赛)
- hdu5532Almost Sorted Array 最长递增子序列模板水题
- [Array]Merge Sorted Array
- Leetcode - Array - Merge Sorted Array
- LeetCode[Array]: Merge Sorted Array
- [leetcode][array]Merge Sorted Array
- LeetCode: Merge Sorted Array
- Merge Sorted Array
- [Leetcode] Merge Sorted Array
- Merge Sorted Array
- [LeetCode] Merge Sorted Array
- Merge Sorted Array
- Merge Sorted Array
- [88]Merge Sorted Array
- Merge Sorted Array
- Merge Sorted Array
- [LeetCode]Merge Sorted Array
- C#删除和清空文件夹的程序
- 拆分窗格
- 加载.plist中的汉字
- 05-假附和幽默
- C# 防止界面假死 多线程进度条的合理使用
- hdu5532Almost Sorted Array
- 复选框,单选框
- 纯CSS实现文字一行居中,多行左对齐的方法
- 计算机编程领域最伟大的20个发明
- hdu 5533 Dancing Stars on Me
- 记事本界面
- 一些知名的博客,常常去逛逛
- C#TreeView复选框的选择
- Java for Web学习笔记(六):Servlet(4)HttpServletResponse