C - Illuminate Buildings Editorial
by
kyopro_friends
「最初に選ぶビルの位置と何個飛ばしでビルを選ぶかを全探索し、列を伸ばせるだけ伸ばす」とすると \(O(N^2\log N)\) となりACすることができます。
N=int(input())
H=list(map(int,input().split()))
ans=1
for i in range(N):
for w in range(1,N-i):
cnt=1
while i+cnt*w<N and H[i]==H[i+cnt*w]:
cnt+=1
ans=max(ans,cnt)
print(ans)
3重ループであるため一見すると \(\Theta(N^3)\) に見えますが、while文の中身が実行される回数が \(O(N/w)\) であることから、内側のfor文全体でのステップ数が調和級数の和になり \(O(N\log N)\) となるためです。
posted:
last update: