Submission #44067838


Source Code Expand

class BIT
	def initialize n
		@n = n+1 # accessing 0..n-1, 1..n internally.
		@a = [0]*@n
	end

	def [] i
		i += 1
		s = 0
		while 0<i
			s += @a[i]
			i &= i-1
		end
		return s
	end
	def lb s
		i,t,b = 0,0,1<<(@n-1).bit_length
		t += @a[i|=b] if i|b<@n && t+@a[i|b]<s while 0<b >>= 1
		return i if i<@n-1 # i は1大きい内部インデックス(もしくは 0)だけど、求めた添字が s 未満の値を返す最大の添字であり、s の lower_bound としては +1 したものを返したいから、足し引きして内部インデックスそのままの値を返す(アクセス可能な範囲(0...@n-1)なら)。
	end

	def add i,d
		i += 1
		while i<@n
			@a[i] += d
			i += i&-i
		end
	end
	def inc i; add i,1 end
	def dec i; add i,-1 end
end

(N,M),*TX = $<.map{|ln| ln.split.map(&:to_i) }

T = [],[],[]
TX.each{|t,x|
	T[t]<<x
}
T.each(&:sort!)

X = 0,*TX.map{_2}.uniq.sort.reverse
I = X.each_with_index.to_h
Ord = BIT.new I.size+1
Sum = BIT.new I.size+1

T[0].each{|x|
	i = I[x]
	Ord.inc i
	Sum.add i,x
}

p [0,*T[2].reverse].map.with_index{|co,dm|
	co.times{
		x = T[1].pop
		break if ! x
		i = I[x]
		Ord.inc i
		Sum.add i,x
	}
	m = M-dm
	next 0 if m<1
	i = Ord.lb m
	next Sum[I.size] if ! i
	next 0 if i<1
	m -= Ord[i-1]
	next Sum[i-1]+m*X[i]
}.max

Submission Info

Submission Time
Task F - Cans and Openers
User ds14050
Language Ruby (2.7.1)
Score 500
Code Size 1344 Byte
Status AC
Exec Time 696 ms
Memory 51104 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 46
Set Name Test Cases
Sample sample00.txt, sample01.txt, sample02.txt
All sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt
Case Name Status Exec Time Memory
sample00.txt AC 56 ms 14128 KiB
sample01.txt AC 61 ms 14204 KiB
sample02.txt AC 57 ms 14212 KiB
testcase00.txt AC 649 ms 47576 KiB
testcase01.txt AC 391 ms 47792 KiB
testcase02.txt AC 696 ms 51104 KiB
testcase03.txt AC 611 ms 45664 KiB
testcase04.txt AC 649 ms 45520 KiB
testcase05.txt AC 639 ms 44200 KiB
testcase06.txt AC 654 ms 45612 KiB
testcase07.txt AC 429 ms 45688 KiB
testcase08.txt AC 503 ms 45272 KiB
testcase09.txt AC 517 ms 44804 KiB
testcase10.txt AC 591 ms 45808 KiB
testcase11.txt AC 439 ms 45616 KiB
testcase12.txt AC 505 ms 45260 KiB
testcase13.txt AC 490 ms 44540 KiB
testcase14.txt AC 606 ms 45312 KiB
testcase15.txt AC 405 ms 45160 KiB
testcase16.txt AC 504 ms 45060 KiB
testcase17.txt AC 529 ms 45548 KiB
testcase18.txt AC 602 ms 45460 KiB
testcase19.txt AC 406 ms 44756 KiB
testcase20.txt AC 508 ms 45040 KiB
testcase21.txt AC 515 ms 45232 KiB
testcase22.txt AC 610 ms 45544 KiB
testcase23.txt AC 607 ms 44972 KiB
testcase24.txt AC 656 ms 45136 KiB
testcase25.txt AC 573 ms 44892 KiB
testcase26.txt AC 638 ms 46008 KiB
testcase27.txt AC 608 ms 38840 KiB
testcase28.txt AC 690 ms 42380 KiB
testcase29.txt AC 596 ms 39912 KiB
testcase30.txt AC 684 ms 43132 KiB
testcase31.txt AC 593 ms 39804 KiB
testcase32.txt AC 631 ms 42752 KiB
testcase33.txt AC 659 ms 42656 KiB
testcase34.txt AC 689 ms 42944 KiB
testcase35.txt AC 613 ms 39152 KiB
testcase36.txt AC 680 ms 42688 KiB
testcase37.txt AC 661 ms 42652 KiB
testcase38.txt AC 569 ms 42932 KiB
testcase39.txt AC 613 ms 40636 KiB
testcase40.txt AC 673 ms 43016 KiB
testcase41.txt AC 663 ms 41096 KiB
testcase42.txt AC 589 ms 43292 KiB