| 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.
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 .
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 |
http://acm.hdu.edu.cn/showproblem.php?pid=5532
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int a[100010];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
int f1=0;
int f2=0;
int s=0,d=0;//升,降 gg
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(i!=1){
if(a[i]<a[i-1]){
f1++;
s=i;
}
if(a[i]>a[i-1]){
f2++;
d=i;
}
}
}
int k1=0,k2=0;
if(f1>1 && f2>1){
printf("NO\n");
continue;
}
if(f1==0 || f2==0){
printf("YES\n");
continue;
}
if(f1==1){
a[n+1]=9999999;
a[0]=0;
if(a[s]>=a[s-2] || a[s-1]<=a[s+1]){
k1=1;
}
}
if(f2==1){
a[n+1]=0;
a[0]=9999999;
if(a[d]<=a[d-2] || a[d-1]>=a[d+1]){
k2=1;
}
}
if(k1==1 || k2==1){
printf("YES\n");
}
else{
printf("NO\n");
}
}
}
博客提供了HDU ACM的题目链接,链接为http://acm.hdu.edu.cn/showproblem.php?pid=5532 ,可通过此链接访问相关题目。
6万+

被折叠的 条评论
为什么被折叠?



