Codeforces Round # FF (Div. 2): C. DZY Loves Sequences,
C. DZY Loves Sequencestime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard output
DZY has a sequenceA, ConsistingNIntegers.
We'll call a sequenceAI, Bytes,AIPipeline + pipeline 1, pipeline..., Pipeline ,...,AJ(1 digit ≤ DigitILimit ≤ limitJLimit ≤ limitN) A subsegment of the sequenceA. The value (JAccept-Encoding-IBytes + segment 1) denotes the length of the subsegment.
Your task is to find the longest subsegmentA, Such that it is possible to change at most one number (change one number to any integer you want) from the subsegment to make the subsegment strictly increasing.
You only need to output the length of the subsegment you find.
Input
The first line contains integerN(1 digit ≤ DigitNLimit ≤ limit 105). The next line containsNIntegersA1, bytes,A2, middle..., middle ,...,AN(1 digit ≤ DigitAILimit ≤ limit 109 ).
Output
In a single line print the answer to the problem-the maximum length of the required subsegment.
Sample test (s) Input
67 2 3 1 5 6
Output
5
Note
You can choose subsegmentA2, bytes,A3, bytes,A4, middle,A5, middle,A6 and change its 3rd element (that isA4) to 4.
You can change one character in a string to produce its longest continuous string.
In the case column, 7 2 3 1 5 6 ----- 7 2 3 4 5 6
The output is 5.
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<sstream>#include<cmath>using namespace std;#define f1(i, n) for(int i=0; i<n; i++)#define f2(i, m) for(int i=1; i<=m; i++)#define f3(i, n) for(int i=n; i>=1; i--)#define f4(i, n) for(int i=1; i<=n; i++)#define f5(i, n) for(int i=2; i<=n; i++)#define M 1005const int INF = 0x3f3f3f3f;int n, a[100005], b[100005];int main(){ cin>>n; f4(i, n) cin>>a[i]; b[1]=1; f5(i, n) { b[i]=1; if (a[i]>a[i-1]) b[i]=b[i-1]+1; } int ans=-INF; f3(i, n) { if (b[i]==n) ans=max(b[i], ans); else ans=max(ans, b[i]+1); if (a[i-b[i]+1]-1>a[i-b[i]-1]) ans=max(ans,b[i]+b[i-b[i]]); if (a[i-b[i]+2]-1>a[i-b[i]]) ans=max(ans,b[i]+b[i-b[i]]); } cout<<ans<<endl; return 0;}