์•Œ๊ณ ๋ฆฌ์ฆ˜/์„ ํ˜•๊ตฌ์กฐ

[๋ฐฑ์ค€ 17298 ๐Ÿฅ‡] ์˜คํฐ์ˆ˜

1eehyunji 2023. 10. 7. 21:21

https://www.acmicpc.net/problem/17298

 

17298๋ฒˆ: ์˜คํฐ์ˆ˜

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ N์ธ ์ˆ˜์—ด A = A1, A2, ..., AN์ด ์žˆ๋‹ค. ์ˆ˜์—ด์˜ ๊ฐ ์›์†Œ Ai์— ๋Œ€ํ•ด์„œ ์˜คํฐ์ˆ˜ NGE(i)๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Ai์˜ ์˜คํฐ์ˆ˜๋Š” ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฉด์„œ Ai๋ณด๋‹ค ํฐ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์˜คํฐ์ˆ˜๋Š” -1์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A = [3, 5, 2, 7]์ธ ๊ฒฝ์šฐ NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1์ด๋‹ค. A = [9, 5, 4, 8]์ธ ๊ฒฝ์šฐ์—๋Š” NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ด N๊ฐœ์˜ ์ˆ˜ NGE(1), NGE(2), ..., NGE(N)์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

  • ๋˜ ์ž์ฃผ ํ’€์–ด๋ดค๋˜ ์Šคํƒ ์œ ํ˜•..!
  • ์˜ค๋ฅธ์ชฝ ์ˆ˜ ์ค‘ ์ž์‹ ๋ณด๋‹ค ํฌ๋ฉด์„œ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ, ์ˆ˜์—ด์˜ ๋งจ ์˜ค๋ฅธ์ชฝ ์ˆ˜๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ–ˆ๋‹ค.
  • ์ž์‹ ๋ณด๋‹ค ํฐ ๊ฐ’์ด stack์— top์— ์œ„์น˜ํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋‘ popํ•ด์ฃผ๊ณ , stack์— ๋‚จ์€ ๊ฐ’์ด ์žˆ์œผ๋ฉด stack์˜ top์ด ์ž์‹ ์˜ ์˜คํฐ์ˆ˜๊ฐ€ ๋œ๋‹ค.

import sys

n=int(sys.stdin.readline())
numbers=list(map(int, sys.stdin.readline().split(' ')))

ans=[-1]*n
stack=[]
stack.append(numbers[n-1])
for i in range(n-2, -1, -1):
    # ์ž์‹ ๋ณด๋‹ค ํฐ ๊ฐ’์ด stack์˜ top์— ์œ„์น˜ํ•  ๋•Œ๊นŒ์ง€ pop
    while stack and stack[-1]<=numbers[i]:
        stack.pop()
    # stack์— ๋‚จ์€ ๊ฐ’์ด ์žˆ์œผ๋ฉด
    if stack:
        ans[i]=stack[-1]
    stack.append(numbers[i])

print(*ans, sep=' ')