능력치가 다 다른 개발자
N명이 팀 빌딩을 위해 한 줄로 서있다.
하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다.
개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같이 계산이 된다.
(개발자 A와 개발자 B 사이에 존재하는 다른 개발자 수) × min(개발자 A의 능력치, 개발자 B의 능력치)
예를 들어, 4명의 개발자가 존재할 때, 각 개발자의 능력치를 1 4 2 5라고 하자. 이때 능력치가 1인 개발자와 능력치가 5인 개발자가 한 팀을 이뤘다고 가정하자. 그러면 이 팀의 능력치는
가 된다.
팀 빌딩에서 나올 수 있는 팀 중 능력치의 최대값을 구해보자.
물구나무 서서 봐도 투포인터 문제
정렬을 하지 않아도 됨. 왜냐 A,B 사이 친구들 개수도 봐야하기 때문도 맞지만, only A랑 B중 누가 더 작냐만 봐도 어떤 포인터를 옮겨야 하는 지를 알 수 있는 기준이 되기 때문
maxAbility 값에 영향을 주는 것 = A와 B사이 개발자 수, A와 B중 능력치가 작은 놈
A와 B사이 개발자 수는 p1을 0, p2를 N-1로 잡아서 최대로 해둠
= 초기 A는 맨 처음 개발자, B를 맨 마지막에 서있는 개발자
A와 B 중 작은놈이 maxAbility를 찾기 위한 투 포인터 중 무엇을 옮기냐의 기준이 됨.
=A가 작다면 A말고 다른놈(p1++), B가 더 작다면 B말고 다른놈(p2--)을 사이 간격이 하나씩 줄어들게 하면서(어차피 최대였으니까) 선택하면 됨.
증말 해노코 보면 쉬운데 저 투 포인터를 어케 움직일까에 대한 기준을 자아아아알 생각해봐야겠서
N = int(input())
ability = list(map(int,input().split()))
maxAbility,p1,p2= 0,0,N-1
while p1<=p2:
maxAbility =max(maxAbility,(p2-p1-1)*min(ability[p1],ability[p2]))
if ability[p1]<ability[p2]:
p1+=1
else:
p2-=1
print(maxAbility)