intさわだんのBlack History

刹那的レジェンドになりたい。

第12回日本情報オリンピック 本選 「電飾(Illumination)」

やるだけ。
実装。

#include <bits/stdc++.h>
using namespace std;

int n,co,ans;
int ren[100004];
int ha[100004];
bool l[100004];

int main(){
	scanf("%d",&n);
	ans = 1;

	for(int i = 1;i <= n;i++){
		int tmp;
		scanf("%d",&tmp);
		if(tmp == 0){
			l[i] = false;
		}else{
			l[i] = true;
		}
		ren[i] = 1;
	}
	bool pre = l[1];
	int s = 1;
	for(int i = 2;i <= n;i++){
		if(pre == l[i]){
			ren[s] =max(1, i - s);
			ren[i-1] = max(i - s,1);
			s = i;
		}
		pre = l[i];
	}
	ren[n] = max(ren[n],n-s+1);
	ren[s] = max(ren[s],n-s+1);
	pre = l[1];
	ans = max(ans,ren[1]);
	for(int i = 2;i <= n;i++){
		ans = max(ans,ren[i]);
		if(pre == l[i]){
			ha[co++] = i-1;
		}
		pre = l[i];
	}
	ans = max(ans,ren[ha[0]]+ren[ha[0]+1]);
	for(int i = 0;i < co - 1;i++){
		int tmp = ren[ha[i]] + ren[ha[i+1]+1] + ren[ha[i]+1];
		ans = max(ans,tmp);
	}

	printf("%d\n",ans);

	return 0;
}