아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

1차원 2048

시간 제한1초메모리 제한1024 MB

요약
수열에서 같은 두 값을 골라 하나를 두 배, 다른 하나를 0으로 바꾸는 연산을 반복해 최댓값을 최대화한다.
난이도

보통10점 중 7점

유형
그리디, 해시맵, 수학, 구현
정답자
아직 제출이 없습니다

문제

2k2^k (0≤k≤620 \le k \le 62) 꼴의 정수 또는 00으로만 이루어진 수열이 있습니다. 흐즈로는 이 수열에 대해 다음과 같은 연산을 정의했습니다.

  • a_i=a_ja\_i = a\_j 인 서로 다른 ii, jj를 골라서 a_i,a_ja\_i, a\_j를 각각 2a_i,02a\_i, 0으로 변경합니다. (이때, 수열의 첫 번째 원소는 a_1a\_1입니다.)

예를 들어, 수열 \[2,4,2,0,1]\[2, 4, 2, 0, 1]에 i=1,j=3i=1, j=3을 골라 실행한다면 수열은 \[4,4,0,0,1]\[4, 4, 0, 0, 1]이 되며, 여기에 i=1,j=2i=1, j=2를 골라 실행한다면 수열은 \[8,0,0,0,1]\[8, 0, 0, 0, 1]이 됩니다.

흐즈로는 수열에 연산을 여러 번 실행하여 수열의 최댓값이 가능한 한 커지길 원합니다. 흐즈로는 이 연산을 계속 반복했다가는 머리가 아파질 것이라고 생각하여, 여러분에게 프로그램 제작을 부탁하기로 했습니다. 수열이 주어졌을 때, 흐즈로가 정의한 연산을 00번 이상 시행하여 수열의 최댓값을 가능한 한 크게 만들어주세요.

입력

첫 번째 줄에 수열의 길이 NN (1≤N≤200,000)(1 \le N \leq 200\\,000)이 주어집니다.

두 번째 줄에 수열의 각 원소 a_ia\_i (1≤i≤N,a_i=0(1\leq i \leq N, a\_i = 0 또는 2k2^k (0≤k≤62))(0 \leq k \leq 62))가 주어집니다. 수열 aa에는 2k2^k꼴의 정수가 반드시 하나 이상 존재합니다.

출력

첫 줄에 흐즈로가 정의한 연산을 00번 이상 수행해 만들 수 있는 가장 큰 최댓값을 출력하세요. 문제의 답은 2622^{62}보다 크지 않음이 보장됩니다.

예제1

  1. 예제 1

    입력
    20
    512 32 64 0 0 0 0 64 64 0 32 0 0 0 512 0 0 256 256 256
    
    예상 출력
    2048