inputの入力をうけるやつ、出力するやつ
# インポート(本編はだいたい30行目あたり)
import sys,itertools,math,heapq
from collections import defaultdict,deque
from sortedcontainers import SortedSet, SortedList, SortedDict #Cpythonでは動かない(importにも多少時間がかかる)
sys.setrecursionlimit(10**8)
dict=defaultdict
# 便利関数定義
def input(): return (sys.stdin.readline()).rstrip()
def yes(): print("Yes"); exit()
def no(): print("No"); exit()
def printe(*values: object,sep: str | None = " ",end: str | None = "\n",): print(*values,sep=sep,end=end); exit() #Cpythonでは動かない
def listr(l:list): return "".join(l)
def debug(*values: object,sep: str | None = " ",end: str | None = "\n",): print(*values,sep=sep,end=end,file=sys.stderr) #デバッグ出力用
# 便利定数定義
ALPHABET="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alphabet="abcdefghijklmnopqrstuvwxyz"
MOD=998244353
# 関数定義スペース
# Lit_to~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 入力スペース
# s=list(input())
s=input()
n=int(input())
h,w=map(int,input().split())
a=list(map(int,input().split()))
# board=[list(input()) for i in range(h)]#文字列のリスト
# board=[list(map(int,input().split())) for i in range(h)]#数値のリスト
# Lit_to================================================================================================本体ここから↓
優先付きキューをインスタンスにして使えるようにしてみた
import heapq
必須だよ
class priorityQueue():#heapqラッパー
def __init__(self,l=list()):#インスタンス化
self.queue=l.copy()
heapq.heapify(self.queue)
def __getitem__(self,i):
return self.queue[i]
def __len__(self):#かぞえる
return len(self.queue)
def __str__(self):#出力用
return str(self.queue)
def enq(self,value):#入れる
return heapq.heappush(self.queue,value)
def add(self,value):#入れる
return heapq.heappush(self.queue,value)
def deq(self):#出す
return heapq.heappop(self.queue)
ぱぱっと二分探索が必要になったとき向け配列.index()
より高速にインデックス番号を知ることが出来るもの
def index(arr:list,value:int,exactry:bool=True,ceil:bool=False):
#ソート済配列をもらって二分探索したうえでインデックスを返す関数。二分探索をします。
#(必須)第1引数にソート済みの配列、第2引数に探したい値を入れる。
#(任意,デフォルト)exatry=Trueでその値がドンピシャの時にのみインデックスを返す。なかった場合は-1を返す。
#この時、値が複数個ある場合はceilルール通りにインデックスを返す。(ceil=Trueの時は一番右側を返し、ceil=Falseの時は一番左側を返す)
#(任意)exatry=Falseでその値がなくてもceilのルール通りにインデックスを返す。
#(任意,デフォルト)ceil=Falseでその値より小さい一番大きい値のインデックスを返す。
#(任意)ceil=Trueでその値より大きい一番小さい値のインデックスを返す。
left, right = 0, len(arr) - 1
result = -1
while left <= right:
center = (left + right) // 2
if arr[center] == value:
result = center
if ceil:
left = center + 1 # 右側に同じ値がないかを確認
else:
right = center - 1 # 左側に同じ値がないかを確認
elif arr[center] < value:
left = center + 1
else:
right = center - 1
if result != -1:
return result
if exactry:
return -1
if ceil:
return right if 0 <= right else -1
else:
return left if left < len(arr) else -1