結果

問題 No.2812 Plus Minus Blackboard
ユーザー aa
提出日時 2024-07-19 22:26:48
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,878 bytes
コンパイル時間 346 ms
コンパイル使用メモリ 82,304 KB
実行使用メモリ 65,920 KB
最終ジャッジ日時 2024-07-19 22:26:51
合計ジャッジ時間 3,027 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 RE -
testcase_01 RE -
testcase_02 RE -
testcase_03 RE -
testcase_04 RE -
testcase_05 RE -
testcase_06 RE -
testcase_07 RE -
testcase_08 RE -
testcase_09 RE -
testcase_10 RE -
testcase_11 RE -
testcase_12 RE -
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 RE -
testcase_19 RE -
testcase_20 RE -
testcase_21 RE -
testcase_22 RE -
権限があれば一括ダウンロードができます

ソースコード

diff #

import heapq
import sys
from sortedcontainers import SortedList
class DualHeap:
    def __init__(self):
        self.min_heap = []  # 最小ヒープ
        self.max_heap = []  # 最大ヒープ
        self.data = SortedList()  # データ全体の管理に利用

    def add(self, value):
        heapq.heappush(self.min_heap, value)
        heapq.heappush(self.max_heap, -value)
        self.data.add(value)

    def remove(self, value):
        if value in self.data:
            self.min_heap.remove(value)
            heapq.heapify(self.min_heap)
            self.max_heap.remove(-value)
            heapq.heapify(self.max_heap)
            self.data.remove(value)
        else:
            print("Value not found in the heap.")
            sys.exit()

    def get_min(self):
        if self.min_heap:
            return self.min_heap[0]
        print('No')
        sys.exit()

    def get_max(self):
        if self.max_heap:
            return -self.max_heap[0]
        print('No')
        sys.exit()

    def __len__(self):
        return len(self.data)
# 使用例
dual_heap = DualHeap()

# 値の追加
dual_heap.add(10)
dual_heap.add(1)
dual_heap.add(5)
dual_heap.add(20)
dual_heap.add(7)

# 最小値の取得
print("Min value:", dual_heap.get_min())

# 最大値の取得
print("Max value:", dual_heap.get_max())

# 値の削除
dual_heap.remove(10)

n=int(input())
a=list(map(int,input().split()))
b=DualHeap()
c=DualHeap()
for i in a:
	if i>0:
		b.add(i)
	else:
		c.add(i)
B=len(b)
C=len(c)
x=sum(a)
if x==0:
	print('Yes')
	exit()
while B+C>1:
	if x>0:
		y=b.get_min()
		z=c.get_min()
		b.remove(y)
		c.remove(z)
		B-=1 
		C-=1 
		if y+z>0:
			b.add(y+z)
			B+=1 
		elif y+z<0:
			c.add(y+z);C+=1
	else:
		y=b.get_max()
		z=c.get_max()
		b.remove(y)
		c.remove(z)
		B-=1 
		C-=1 
		if y+z>0:
			b.add(y+z)
			B+=1 
		elif y+z<0:
			c.add(y+z);C+=1
print('Yes')
0