【Codeforces 446A】DZY Loves Sequences

【链接】 我是链接,点我呀:)
【题意】

让你找一段连续的区间 使得这一段区间最多修改一个数字就能变成严格上升的区间。 问你这个区间的最长长度

【题解】

dp[0][i]表示以i为结尾的最长严格上升长度 dp[1][i]表示以i作为开头的最长严格上升长度. 然后我们枚举那个改变的位置在什么地方就可以了。 别忘了不改变的那种情况。 可以一起做。

【代码】

import java.io.*;
import java.util.*;

public class Main {
	
	
	static InputReader in;
	static PrintWriter out;
		
	public static void main(String[] args) throws IOException{
		//InputStream ins = new FileInputStream("E:\rush.txt");
		InputStream ins = System.in;
		in = new InputReader(ins);
		out = new PrintWriter(System.out);
		//code start from here
		new Task().solve(in, out);
		out.close();
	}
	
	static int N = (int)1e5;
	static class Task{
		public void solve(InputReader in,PrintWriter out) {
			int n;
			int []a = new int [N+10];
			int [][]f =new int[2][N+10];
			n = in.nextInt();
			for (int i = 1;i <= n;i++) a[i] = in.nextInt();
			for (int i = 1;i <= n;i++) {
				f[0][i] = 1;
				if (i-1>=1 && a[i]>a[i-1]) {
					f[0][i] = f[0][i-1] + 1;
				}
			}
			for (int i = n;i >= 1;i--) {
				f[1][i] = 1;
				if (i+1<=n && a[i]<a[i+1])
					f[1][i] = f[1][i+1]+1;
			}
			int MI = -(int)1e9-1,MA = (int)1e9 + 1;
			int ans = 0;
			for (int i = 1;i <= n;i++) {
				int x,y;
				x = MI;y = MA;
				if (i-1>=1) x = a[i-1];
				if (i+1<=n) y = a[i+1];
				if (y>x+1) {
					ans = Math.max(ans, f[0][i-1]+f[1][i+1]+1);
				}else {
					ans = Math.max(ans, Math.max(f[0][i-1]+1, f[1][i+1]+1));
				}
				ans = Math.max(ans, f[0][i]);
				ans = Math.max(ans, f[1][i]);
			}
			out.println(ans);
		}
	}

	

	static class InputReader{
		public BufferedReader br;
		public StringTokenizer tokenizer;
		
		public InputReader(InputStream ins) {
			br = new BufferedReader(new InputStreamReader(ins));
			tokenizer = null;
		}
		
		public String next(){
			while (tokenizer==null || !tokenizer.hasMoreTokens()) {
				try {
				tokenizer = new StringTokenizer(br.readLine());
				}catch(IOException e) {
					throw new RuntimeException(e);
				}
			}
			return tokenizer.nextToken();
		}
		
		public int nextInt() {
			return Integer.parseInt(next());
		}
	}
}
原文地址:https://www.cnblogs.com/AWCXV/p/10382062.html