我仔细想了一夜,结果还是数据造得太离谱了!!!
查看原帖
我仔细想了一夜,结果还是数据造得太离谱了!!!
419487
irrisshirro楼主2022/7/25 08:19

rt。

#include <algorithm>
#define MAXN 4000001
int a[MAXN], a1[MAXN], st[MAXN], top = 0;
int solve(int N) {
	for (int i = 1; i <= N; ++i) a1[i] = a[i] + i;
	int ans = -1;
	for (int i = 1; i <= N; ++i) {
		int minval = a1[i - 1], crt = i - 1;
		while (top && a[st[top]] < a[i]) {
			while (crt > st[top]) 
				minval = std::min(a1[--crt], minval);
			ans = std::max(ans, a[st[top]] - minval + st[top] - 1);
			--top;
		}
		st[++top] = i;
	}
	int minval = a1[N], crt = N;
	while (top) {
		while (crt > st[top]) 
			minval = std::min(a1[--crt], minval);
		ans = std::max(ans, a[st[top]] - minval + st[top] - 1);
		--top;
	}
	return ans;
}

int main() {
	int N = read<int>();
	for (int i = 1; i <= N; ++i) a[i] = read<int>();
	int ans1 = solve(N);
	std::reverse(a + 1, a + N + 1);
	int ans2 = solve(N);
	return print<int>(std::max(ans1, ans2)), 0;
}

这个很明显可以卡掉,比如说

2000000,1999999,,1,1,2,,20000002000000, 1999999, \dots, 1, 1, 2, \dots, 2000000 啊 /fad

2022/7/25 08:19
加载中...