码迷,mamicode.com
首页 > 其他好文 > 详细

【HDOJ5532】Almost Sorted Array(签到)

时间:2018-10-30 21:22:13      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:return   pre   vector   most   space   ==   array   names   mes   

题意:给定一个n个数的数列,问删掉一个数之后剩余部分是否可以单调不增或单调不减

n<=1e5,a[i]<=1e5

思路:预处理一下前后缀是否合法

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<string>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<map>
 8 #include<set>
 9 #include<queue>
10 #include<vector>
11 using namespace std;
12 typedef long long ll;
13 typedef unsigned int uint;
14 typedef unsigned long long ull;
15 typedef pair<int,int> PII;
16 typedef vector<int> VI;
17 #define fi first
18 #define se second 
19 #define MP make_pair
20 #define N  210000
21 #define M  1100
22 #define MOD 2147493647
23 #define eps 1e-8 
24 #define pi acos(-1)
25 
26 int a[N],b[N],c[N],k;
27 
28 int main()
29 {
30     //freopen("F.in","r",stdin);
31     //freopen("F.out","w",stdout);
32     int cas;
33     scanf("%d",&cas);
34     for(int v=1;v<=cas;v++)
35     {
36         k=0;
37         int n;
38         scanf("%d",&n);
39         for(int i=1;i<=n;i++) 
40         {
41             scanf("%d",&a[i]);
42             b[i]=c[i]=0;
43          }    
44         b[1]=1;
45         for(int i=2;i<=n;i++) 
46          if(b[i-1]==1&&a[i]>=a[i-1]) b[i]=1;
47           else c[i]=0;
48         c[n]=1;
49         for(int i=n-1;i>=1;i--)
50          if(c[i+1]==1&&a[i]<=a[i+1]) c[i]=1;
51           else c[i]=0;
52         int flag=0;
53         //for(int i=1;i<=n;i++) printf("%d ",b[i]);
54     //    printf("\n");
55         //for(int i=1;i<=n;i++) printf("%d ",c[i]);
56     //    printf("\n");
57         for(int i=1;i<=n;i++)
58         {
59             if(i>1&&b[i-1]==0) continue;
60             if(i<n&&c[i+1]==0) continue;
61             if(i>1&&i<n&&a[i-1]>a[i+1]) continue;
62             flag=1; k=i;
63             break;
64         }
65     //    printf("%d\n",k);
66         for(int i=1;i<=n;i++) b[i]=c[i]=0;
67         b[1]=1;
68         for(int i=2;i<=n;i++) 
69          if(b[i-1]==1&&a[i]<=a[i-1]) b[i]=1;
70           else break;
71         c[n]=1;
72         for(int i=n-1;i>=1;i--)
73          if(c[i+1]==1&&a[i]>=a[i+1]) c[i]=1;
74           else break;
75         for(int i=1;i<=n;i++)
76         {
77             if(i>1&&b[i-1]==0) continue;
78             if(i<n&&c[i+1]==0) continue;
79             if(i>1&&i<n&&a[i-1]<a[i+1]) continue;
80             flag=1; k=i;
81             break;
82         }
83     //    printf("%d\n",k);
84         if(flag) printf("YES\n");
85          else printf("NO\n");
86     }
87     return 0;
88 } 

 

【HDOJ5532】Almost Sorted Array(签到)

标签:return   pre   vector   most   space   ==   array   names   mes   

原文地址:https://www.cnblogs.com/myx12345/p/9879183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!