結果
| 問題 | No.318 学学学学学 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-12-11 23:44:16 |
| 言語 | Ruby (3.4.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,275 bytes |
| 記録 | |
| コンパイル時間 | 57 ms |
| コンパイル使用メモリ | 7,296 KB |
| 実行使用メモリ | 105,168 KB |
| 最終ジャッジ日時 | 2024-09-15 08:29:04 |
| 合計ジャッジ時間 | 6,739 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 5 TLE * 1 -- * 20 |
コンパイルメッセージ
Syntax OK
ソースコード
#! ruby
# yukicoder My Practice
# author: Leonardone @ NEETSDKASU
def gs(); gets.chomp; end
def gi(); gets.to_i; end
def gss(); gets.chomp.split; end
def gis(); gss.map(&:to_i); end
def bl(n); n < 2 ? 1 : 1 + bl(n >> 1); end
class ST
def initialize(n)
@N = n
@L = (1 << bl(n).succ)
@s = [nil] * @L
end
def put(x0, x1, v)
t = [[x0, x1, 0, 1, @N]]
while !t.empty? do
z0, z1, i, y0, y1 = t.pop
if y0 == z0 && y1 == z1
@s[i] = v
next
end
ym = (y0 + y1) >> 1
j = i.succ << 1
if z0 > ym
if !@s[i].nil?
@s[j] = @s[j - 1] = @s[i]
@s[i] = nil
end
t << [z0, z1, j, ym + 1, y1]
elsif z1 <= ym
if !@s[i].nil?
@s[j] = @s[j - 1] = @s[i]
@s[i] = nil
end
t << [z0, z1, j - 1, y0, ym]
else
if !@s[i].nil?
@s[j] = @s[j - 1] = @s[i]
@s[i] = nil
end
t << [z0, ym, j - 1, y0, ym]
t << [ym + 1, z1, j, ym + 1, y1]
end
end
end
def get(n)
i, y0, y1 = 0, 1, @N
while i < @L && @s[i].nil? do
ym = (y0 + y1) >> 1
i = i.succ << 1
if n > ym
y0 = ym + 1
else
y1 = ym
i -= 1
end
end
i < @L ? @s[i] : nil
end
def gets()
r = []
t = [[0, 1, @N]]
while !t.empty?
i, y0, y1 = t.pop
if @s[i].nil?
j = i.succ << 1
ym = (y0 + y1) >> 1
t << [j, ym + 1, y1]
t << [j - 1, y0, ym]
else
v = @s[i]
r += [v] * (y1 - y0 + 1)
end
end
r
end
end
n = gi
a = gis
m = {}
(1..n).each do |i|
k = a[i - 1]
if m.key? k
m[k] << i
else
m[k] = [i]
end
end
st = ST.new(n)
m.keys.sort.each do |k|
mn, mx = m[k].minmax
st.put(mn, mx, k)
end
puts st.gets * " "