[λ°±μ€] 3020 κ°λ₯λ²λ prefix sum(λμ ν©)
λ¬Έμ :
https://www.acmicpc.net/problem/3020
3020λ²: κ°λ₯λ²λ
κ°λ₯λ²λ ν λ§λ¦¬κ° μ₯μ λ¬Ό(μμκ³Ό μ’ μ μ)λ‘ κ°λμ°¬ λκ΅΄μ λ€μ΄κ°λ€. λκ΅΄μ κΈΈμ΄λ Nλ―Έν°μ΄κ³ , λμ΄λ Hλ―Έν°μ΄λ€. (Nμ μ§μ) 첫 λ²μ§Έ μ₯μ λ¬Όμ νμ μμμ΄κ³ , κ·Έ λ€μμλ μ’ μ μκ³Ό μμμ΄
www.acmicpc.net
λΆμ :
1. μμκ³Ό μ’ μ μμ ꡬλΆμ μ§μμΈμ§ νμμΈμ§λ€. λ°λΌμ κ°λ₯λ²λ κ° λμ΄ 1μΈ κ³³μ μ§λλ€λ©΄ μ’ μ μμ 1μΈ λμ΄, μμμ H -1 μΈ λμ΄λ₯Ό λμμ μ§λλ€κ³ μκ°νλ©΄ λλ€.
2. μμλΌλ¦¬μ (λλ μ’ μ μλΌλ¦¬μ) μμ λ°λμ μκ΄μ΄ μλ€. κ°λ₯λ²λ λ N κΈΈμ΄λ₯Ό ν΅κ³ΌνμΌ νκΈ° λλ¬Έμ΄λ€. μμμ κΈΈμ΄λ§νΌ κ°μ§ μμ κ°μλ₯Ό λ°°μ΄μ μ μ₯νλ€. (μ’ μ μλ λκ°λ€)
3. λμ΄κ° HμΌλ κ°λ₯λ²λ λ μ’ μ μμ H λμ΄λ§μ μ§λκ°λ€. H-1μΌλλ H-1 λμ΄μΈ μ’ μ μ + H λμ΄μΈ μ’ μ μμ μ§λκ°λ€. λ§μ°¬κ°μ§λ‘ H-2μΌλ ==> H-2 λμ΄ μ’ μ μ + H-1 λμ΄ μ’ μ μ + H λμ΄ μ’ μ μμ μ§λκ°λ€. λμ ν©μ μ μ©νλ©΄ λ κ±° κ°λ€.
4. μμκ³Ό μ’ μ μμ λμμ μ§λκ°λ―λ‘ sum λ°°μ΄μ iλμ΄ μμ + H-i λμ΄ μ’ μ μμ λν΄ κ°λ₯λ²λ κ° μ§λκ° μ΄ μ₯μ λ¬Όμ μ μ₯νλ€.
c++ μ½λ :
//
// 3020_ firefly.cpp
// SOMAπ©π»π»
//
// Created by JoSoJeong on 2022/02/21.
//
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int N, H, h;
long long mite[5000001]; //μμ
long long tite[5000001]; //μ’
μ μ
long long sum[5000001];
int main(){
cin >> N >> H;
memset(mite, 0, sizeof(mite));
memset(tite, 0, sizeof(tite));
memset(sum, 0, sizeof(sum));
for(int i = 1; i <= N; i++){
cin >> h;
if(i % 2 == 1){ // μμ
mite[h]++; //h λμ΄μΈ κ°μ
}else{
tite[h]++;
}
}
for(int i = H - 2; i >= 1; i--){ // λμ ν©
mite[i] += mite[i+1];
tite[i] += tite[i+1];
}
for(int i = 1; i <= H; i++){
sum[i] = mite[i] + tite[H + 1 - i]; // i λμ΄ μμ + H - i λμ΄ μ’
μ μ
}
sort(sum+1, sum+H+1); // 1 ~ H
int cnt = 0;
int target = sum[1];
for(int i = 1; i <= H; i++){
if(sum[i] == target){
cnt++;
}
}
cout << target << " " << cnt <<'\n';
return 0;
}