CF 1272 D. Remove One Element
2 seconds
256 megabytes
standard input
standard output
You are given an array aa consisting of nn integers.
You can remove at most one element from this array. Thus, the final length of the array is n−1n−1 or nn.
Your task is to calculate the maximum possible length of the strictly increasing contiguous subarray of the remaining array.
Recall that the contiguous subarray aa with indices from ll to rr is a[l…r]=al,al+1,…,ara[l…r]=al,al+1,…,ar. The subarray a[l…r]a[l…r] is called strictly increasing if al<al+1<⋯<aral<al+1<⋯<ar.
The first line of the input contains one integer nn (2≤n≤2⋅1052≤n≤2⋅105) — the number of elements in aa.
The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1091≤ai≤109), where aiai is the ii-th element of aa.
Print one integer — the maximum possible length of the strictly increasing contiguous subarray of the array aa after removing at most one element.
5
1 2 5 3 4
4
2
1 2
2
7
6 5 4 3 2 4 3
2
In the first example, you can delete a3=5a3=5. Then the resulting array will be equal to [1,2,3,4][1,2,3,4] and the length of its largest increasing subarray will be equal to 44.
这个题我自己的写法WA了,改来改去太复杂,所以后来直接借用学长的思路。
用学长的思路写这篇博客吧,学长原贴:https://www.cnblogs.com/xyq0220/p/12036109.html
O(n) 预处理出l[i]为i作为终点的最长严格递增子段,r[i]为i作为起始点的最长严格递增子段。
不删除一个元素,ans=max{l[i]},(1<=i<=n)。
删除一个元素,ans=max{l[i−1]+r[i+1]},(1<i<n&&a[i−1]<a[i+1])
1 #include<bits/stdc++.h>
2 #define fi first
3 #define se second
4 #define lson l,mid,p<<1
5 #define rson mid+1,r,p<<1|1
6 #define pb push_back
7 #define ll long long
8 using namespace std;
9 const int inf=1e9;
10 const int mod=1e9+7;
11 const int maxn=2e5+10;
12 int n;
13 int a[maxn];
14 int l[maxn],r[maxn];
15 int main(){
16 ios::sync_with_stdio(false);
17 //freopen("in","r",stdin);
18 cin>>n;
19 int ans=0;
20 for(int i=1;i<=n;i++){
21 cin>>a[i];
22 if(a[i]>a[i-1]) l[i]=l[i-1]+1;
23 else l[i]=1;
24 ans=max(ans,l[i]);
25 }
26 r[n]=1;
27 for(int i=n-1;i>=1;i--){
28 if(a[i]<a[i+1]) r[i]=r[i+1]+1;
29 else r[i]=1;
30 }
31 for(int i=2;i<n;i++){
32 if(a[i+1]>a[i-1]) ans=max(ans,l[i-1]+r[i+1]);
33 }
34 cout<<ans<<endl;
35 return 0;
36 }
类似于B 的隔板法,将遍历过程中不符合严格单调递增的作为板子,进行分割。
但是分割之后,隔间与隔间是相互联系的,与走楼梯的经典迭代问题相似。
这题关键就在于怎么巧妙运用隔板法和迭代编写程序。
这题虽然很简单,但是改了好几次,没办法,菜是原罪。
CF 1272 D. Remove One Element的更多相关文章
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...
- Codeforces Round #605 (Div. 3) D. Remove One Element(DP)
链接: https://codeforces.com/contest/1272/problem/D 题意: You are given an array a consisting of n integ ...
- how to remove an element in lxml
import lxml.etree as et xml=""" <groceries> <fruit state="rotten"& ...
- CF1272D. Remove One Element 题解 动态规划
题目链接:http://codeforces.com/contest/1272/problem/D 题目大意: 给你一个长度为 \(n\) 的数组,你最多删除一个元素(也可以不删),求此条件限制下的最 ...
- 【cf比赛记录】Codeforces Round #605 (Div. 3)
比赛传送门 Div3真的是暴力杯,比div2还暴力吧(这不是明摆的嘛),所以对我这种一根筋的挺麻烦的,比如A题就自己没转过头来浪费了很久,后来才醒悟过来了.然后这次竟然还上分了...... A题:爆搜 ...
- CF 768B
CF 768B题意:In each operation Sam must remove any element x, such that x>1, from the list and inser ...
- Codeforces 1272 A-E
Codeforces 1272 A-E A Three Friends 直接枚举所有情况,共\(3\times 3\times 3=27\)种. code #include<bits/stdc+ ...
- jQuery之empty、remove、detach
三者都有把元素移除的作用,但细微的差别,造就了它们的使命不同. 最权威的解释当然是jQuery_API咯,下面是API中关于他三儿的部分截取. 一.empty: This method removes ...
- 402. Remove K Digits
(English version is after the code part) 这个题做起来比看起来容易,然后我也没仔细想,先速度刷完,以后再看有没有改进. 用这个来说: 1 2 4 3 2 2 1 ...
- [Swift]LeetCode703. 数据流中的第K大元素 | Kth Largest Element in a Stream
Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...
随机推荐
- webrtc 拥塞控制相关
RFC8836 对实时交互式音视频应用的拥塞控制算法需求进行了较为全面的总结 延迟 拥塞控制算法应该尽可能降低延时,尤其是算法本身引入的延时.与此同时仍然需要提供可用的带宽水平. -吞吐率:在相应场景 ...
- unity Android 可后台替换图片
using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; usin ...
- navicat图形工具和pymysql模块的使用
一 Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:http ...
- centos7下的apache2.4安全配置
基本概括 关键词Server ServerRoot "/etc/httpd" #apache软件安装的位置 Listen 80 #监听的端口号 ServerName ww ...
- .net中微信、支付宝回调
需求:自助机调用接口生成二维码,用户扫描二维码付款后,回调方法里写入到数据库,自助机轮询查数据库判断用户是否付款. 1 using bk.Services.Log; 2 using bk.web.Co ...
- [*]Quadratic Residual Networks: A New Class of Neural Networks for Solving Forward and Inverse Problems in Physics Involving PDEs
Accepted by SIAM International Conference on Data Mining (SDM21) 本文提出了二次残差网络,通过在应用激活函数之前,添加二次残差项到输入的 ...
- 瞬间并发测试-jmeter
测试需求:秒杀场景,瞬间并发.通常来说,JMeter的线程数即为并发的压力数,实际上JMeter在运行时,每个线程是独立的,虽然有100个线程,但这些线程并不是同时向服务器发送请求,JMeter要模拟 ...
- HTML 到 CSS,乃至进阶的 XML、SQL、JS、PHP 和 ASP.NET
https://www.runoob.com/tags/html-reference.html 在线版,从基础的 HTML 到 CSS,乃至进阶的 XML.SQL.JS.PHP 和 ASP.NET. ...
- SQL Server【提高】分区表
分区表 分区视图 分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表. 什么时候需要分区表 数据库中某个表中的数据很多. 数据是分段的 分区的方式 水平分区 水平表分区就是将一个 ...
- 获取异步请求的结果 | JS | VUEX | axios
这里都是获取异步axios的请求结果 一.async/await的方式(获取一个vuex中的异步请求的结果) 1.在vuex(store中的index.js)中定义异步函数 1> 在mutati ...