NBUT-1667 Hkhv Loves Sequences

题目大意是给定1e5个的数列问你只能改一个数,使得他变成任意的数。之后数列中最长升序列的长度是多少?
我上来觉得是dp,但是没有想清楚后来又尺取,发现要更改的数可能是小于前一个或者大于前一个情况较多于是看了看题解发现确实是dp不过没想到处理两次
做法是正着处理当前数从左边延申的最长上升,倒着处理当前数从右边延申的最长上升。枚举每一个数看他能否更改使得数列连续。
如果能就用左边的加上当前加上右边的
否则就取出左边的或者右边的最长的+1这里是直接把这个数能更改用上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[100005],l[100005],r[100005];
int main()
{
int n;
while(~scanf("%d",&n))
{
int ans=0;
l[n+1]=r[n+1]=a[n+1]=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
if(a[i]>a[i-1]) l[i]=l[i-1]+1;
else l[i]=1;
for(int i=n;i;i--)
if(a[i]<a[i+1]) r[i]=r[i+1]+1;
else r[i]=1;
for(int i=1;i<=n;i++)
if(a[i+1]>a[i-1]+1) ans=max(ans,r[i+1]+l[i-1]+1);
else ans=max(ans,max(r[i+1],l[i-1])+1);
printf("%d\n",ans);
}
}
就算是一分钱,也是对作者极大的支持
------ 本文结束 ------

版权声明

Baccano by baccano is licensed under a Creative Commons BY-NC-ND 4.0 International License.
baccano创作并维护的Baccano博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于baccano 博客( http://baccano.fun ),版权所有,侵权必究。

小游戏

---小游戏:要不要来选择一下自己可能的老婆?---

简易发声器

---简易的七键钢琴插件---

可以使用鼠标点击琴键也可以使用主键盘1-7或者小键盘的1-7来操作

那么现在开始吧

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
0%