๋ฌธ์
ํฌ๊ธฐ๊ฐ N์ธ ์์ด A = A1, A2, ..., AN์ด ์๋ค. ์์ด์ ๊ฐ ์์ Ai์ ๋ํด์ ์ค๋ฑํฐ์ NGF(i)๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค.
Ai๊ฐ ์์ด A์์ ๋ฑ์ฅํ ํ์๋ฅผ F(Ai)๋ผ๊ณ ํ์ ๋, Ai์ ์ค๋ฑํฐ์๋ ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ ์์ด A์์ ๋ฑ์ฅํ ํ์๊ฐ F(Ai)๋ณด๋ค ํฐ ์ ์ค์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฌํ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ค๋ฑํฐ์๋ -1์ด๋ค.
์๋ฅผ ๋ค์ด, A = [1, 1, 2, 3, 4, 2, 1]์ธ ๊ฒฝ์ฐ F(1) = 3, F(2) = 2, F(3) = 1, F(4) = 1์ด๋ค. A1์ ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ ๋ฑ์ฅํ ํ์๊ฐ 3๋ณด๋ค ํฐ ์๋ ์๊ธฐ ๋๋ฌธ์, NGF(1) = -1์ด๋ค. A3์ ๊ฒฝ์ฐ์๋ A7์ด ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ F(A3=2) < F(A7=1) ์ด๊ธฐ ๋๋ฌธ์, NGF(3) = 1์ด๋ค. NGF(4) = 2, NGF(5) = 2, NGF(6) = 1 ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 โค N โค 1,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ์ ์์ด A์ ์์ A1, A2, ..., AN (1 โค Ai โค 1,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด N๊ฐ์ ์ NGF(1), NGF(2), ..., NGF(N)์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 512 MB | 15049 | 6833 | 5265 | 44.740% |
https://www.acmicpc.net/problem/17299 |
ํ์ด
์ฝ๋
public class ์ค๋ฑํฐ์ {
/*
๋ฑ์ฅํ์์ ๋ฐ๋ผ์..! ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ ๋ฑ์ฅํ ํ์๊ฐ An๋ณด๋ค ํฐ์์ค์ ๊ฐ์ฅ์ผ์ชฝ์ ์๋์๋ฅผ ์ฐพ๋๋ค.
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
int N = Integer.parseInt(br.readLine());
int[] data = new int[N];
int[] count = new int[1000001]; //data ์
๋ ฅ์ ๋ฐ์ ํ์ ๊ฐฏ์๋ฅผ ํ์ธ ํ์ฌ count๋ฅผ ๋ง๋ค๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋์จ๋ค.
int[] answer = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++){
data[i] =Integer.parseInt(st.nextToken());
count[data[i]]++;
}
for(int i=0; i<N; i++){
while (!stack.isEmpty() && count[data[stack.peek()]] < count[data[i]]){
answer[stack.pop()] = data[i];
}
stack.add(i);
}
while (!stack.isEmpty()){
answer[stack.pop()] = -1;
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(answer[i]).append(" ");
}
System.out.println(sb);
}
}