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

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

단열재

면접 대비

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

요약
주어진 n개의 양의 계수를 재배열해 합과 이웃한 층 사이의 증가분 합을 더한 값이 최대가 되도록 하고, 그 최댓값을 출력한다.
난이도

보통10점 중 5점

유형
그리디, 정렬, 수학, 배열
정답자
아직 제출이 없습니다

문제

Insumax 사는 여러 겹으로 이루어진 단열재를 만든다. 단열재는 nn개의 층으로 구성되며, ii번째 층(i=1,2,…,ni = 1, 2, \dots, n)은 양의 정수인 단열 계수 aia_i로 나타낸다. 층의 번호는 열이 빠져나가는 방향을 따라 매긴다.

heat  ->  || a1 | a2 | ... | ai | ai+1 | ... | an ||  ->

단열재 전체의 단열 계수 AA는 각 층의 단열 계수의 합으로 정해진다. 여기에 더해, 어떤 층 뒤에 그보다 단열 계수가 큰 층이 오면 두 값의 차이만큼 AA가 커진다. 정확히는 다음과 같이 정의한다.

A=∑i=1nai+∑i=1n−1max⁡(0, ai+1−ai)A = \sum_{i=1}^{n} a_i + \sum_{i=1}^{n-1} \max(0,\ a_{i+1} - a_i)

예를 들어 층을 5,4,1,75, 4, 1, 7 순서로 놓으면 A=(5+4+1+7)+(7−1)=23A = (5 + 4 + 1 + 7) + (7 - 1) = 23이다.

주어진 층들의 단열 계수 a1,a2,…,ana_1, a_2, \dots, a_n을 적절히 배열하여 단열재 전체의 단열 계수 AA를 최대로 만들었을 때, 그 최댓값을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 층의 개수 nn이 주어진다(1≤n≤1000001 \le n \le 100000). 이어지는 nn개의 줄에 각 층의 단열 계수 a1,a2,…,ana_1, a_2, \dots, a_n이 한 줄에 하나씩 주어진다. 각 계수는 1≤ai≤100001 \le a_i \le 10000을 만족하는 정수이다.

출력

층을 적절히 배열했을 때 얻을 수 있는 단열재 전체의 단열 계수 AA의 최댓값을 한 줄에 하나의 정수로 출력한다.

예제3

  1. 예제 1

    입력
    4
    5
    4
    1
    7
    
    예상 출력
    24
    
  2. 예제 2

    입력
    2
    1
    10000
    
    예상 출력
    20000
    
  3. 예제 3

    입력
    3
    5
    5
    5
    
    예상 출력
    15