Almost Sorted Array

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 236    Accepted Submission(s): 113

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
 
 
题目大意:给你n个数的序列,问你能否从中删除一个数,让剩下的序列为不递增或不递减。
 
解题思路:考虑第一个是否一定保留第一个数字。如果删除第一个数字,那么直接从第二个数字往后,判断序列是否是不递增或不递减的。如果不删除第一个数字,那么发现只删除一个数字满足的呈现这两种情况。以判断不递减为例。对于序列 7 8 1000 9 10 来说,中间那个数字过分得大了,如果保留1000,那么后边的序列都会不能用,所以,我们需要删除的是1000,这样序列才会呈现不递减。对于序列 7 8 1 9 10来说,很明显,1是要删除的。删除1后,这个序列才会呈现不递减。于是我们判断是否a[i]<a[i-1]。如果有,那么说明有元素需要删除,对于第一种情况,我们的i会指向9,同时我们需要判断,是否a[i]>=a[i-2],也就是这里的9与8。对于第二种情况,我们同样判断是否a[i]<a[i-1],但是这时候的i指向1,我们要判断是否a[i+1]>=a[i-1]。如果不满足,说明这里需要删除的元素不只一个,所以直接false,否则,记录已经删除过一个元素。如果下次又有a[i]<a[i-1],那么直接false。
 
 
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn = 100010;
const int INF = 0x3f3f3f3f;
int a[maxn];
bool jud1(int n){
int tmp = a[2];
for(int i = 2; i <=n; i++){
if(tmp > a[i]){
return false;
}else{
tmp = a[i];
}
}
return true;
}
bool jud2(int n){
int tmp = a[2];
for(int i = 2; i <= n; i++){
if(tmp < a[i]){
return false;
}else{
tmp = a[i];
}
}
return true;
}
bool jud3(int n){
a[0] = 0; a[n+1] = INF;
int tim = 0;
int fir = 0;
for(int i = 2; i <= n; i++){
if(a[i]<a[i-1]){
if(fir == 1)
return false;
fir++;
if(a[i+1]>=a[i-1]||a[i]>=a[i-2]){
continue;
}else{
return false;
}
}
}
return true;
}
bool jud4(int n){
a[0] = INF; a[n+1] = 0;
int tim = 0;
int fir = 0;
for(int i = 2; i <= n; i++){
if(a[i]>a[i-1]){
if(fir == 1)
return false;
fir++;
if(a[i+1]<=a[i-1]||a[i]<=a[i-2]){
continue;
}else{
return false;
}
}
}
return true;
}
int main(){
int T,n,m;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
}
if(jud1(n)){
puts("YES");
continue;
}
if(jud2(n)){
puts("YES");
continue;
}
if(jud3(n)){
puts("YES");
continue;
}
if(jud4(n)){
puts("YES");
continue;
}
puts("NO");
}
return 0;
}
/*
555
4
8 6 7 8
4
8 6 7 7
5
1 2 1000 7 8
5
1 2 100 2 3
4
1 1 1 1
6
7 8 1 1 1 10 */

  

 

HDU 5532——Almost Sorted Array——————【技巧】的更多相关文章

  1. hdu 5532 Almost Sorted Array(模拟)

    Problem Description We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, ...

  2. HDU 5532 Almost Sorted Array (最长非递减子序列)

    题目链接 Problem Description We are all familiar with sorting algorithms: quick sort, merge sort, heap s ...

  3. hdu 5532 Almost Sorted Array (水题)

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  4. hdu 5532 Almost Sorted Array nlogn 的最长非严格单调子序列

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  5. HDU - 5532 Almost Sorted Array (最长非严格单调子序列)

    We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, insertion sort, sele ...

  6. hdu 5532 Almost Sorted Array

    http://acm.hdu.edu.cn/showproblem.php?pid=5532  题目大意: 给你一个不规则的序列,问是否能够通过删除一个元素使其成为一个有序的序列(递增或递减(其中相邻 ...

  7. 【HDU 5532 Almost Sorted Array】水题,模拟

    给出一个序列(长度>=2),问去掉一个元素后是否能成为单调不降序列或单调不增序列. 对任一序列,先假设其可改造为单调不降序列,若成立则输出YES,不成立再假设其可改造为单调不增序列,若成立则输出 ...

  8. 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  9. HDU 5532 / 2015ACM/ICPC亚洲区长春站 F.Almost Sorted Array

    Almost Sorted Array Problem Description We are all familiar with sorting algorithms: quick sort, mer ...

随机推荐

  1. 「美团 CodeM 初赛 Round A」最长树链

    题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 ...

  2. ACM 离散化处理

    使用STL算法离散化: 思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值. 1.  unique():   头文件为algorithm unique的作用是“去掉”容器中相邻元素的重复元 ...

  3. plsql查询结果中文乱码

    网上的教程很多,但是这里需要说明的是如果没有安装oracle客户端的情况下,该怎么修改注册表里面的oracle参数呢? 当然有些是不需要改注册表的,只需要配置环境变量就可以了,但是有的时候发现改了之后 ...

  4. Oracle基本函数即字段拆分

    --创建用户 CREATE USER jim IDENTIFIED BY changeit; --给用户赋登陆连接权限 GRANT CONNECT TO jim; --给用户赋资源权限 GRANT R ...

  5. Codeforces Round #549 div2 1143-B Nirvana 题解

    Kurt reaches nirvana when he finds the product of all the digits of some positive integer. Greater v ...

  6. php 顺序线性表

    <?php /* * 线性顺序表 ,其是按照顺序在内存进行存储,出起始和结尾以外都是一一连接的(一般都是用一维数组的形式表现) * * GetElem: 返回线性表中第$index个数据元素 * ...

  7. springcloud系列八 整合Hystrix

    feign本身是支持Hystrix的,所以不需要引入其他依赖: 我们可以看看feign这个项目的依赖,就是引入这个依赖的pom.xml 要想看这个很简单,点击那个依赖进去就可以了 点进去就可以看到 & ...

  8. pytorch构建优化器

    这是莫凡python学习笔记. 1.构造数据,可以可视化看看数据样子 import torch import torch.utils.data as Data import torch.nn.func ...

  9. 执行umount 的时候却提示:device is busy 的处理方法

    [root@web2-server yum.repos.d]# umount /mnt/cdrom/ umount: /mnt/cdrom: device is busy. (In some case ...

  10. BZOJ 3631 松鼠的新家 树上差分

    我猜会有智障说直接链剖+线段树…(希望没有) From RYC's 课件 然鹅我并不反对树剖...我是智障...QAQ 好吧还是树上差分:设 a[i]=u.a[i+1]=v ++w[u],++w[v] ...