見出し画像

ほぼ日刊競プロ ABC273 C - (K+1)-th Largest Number

C - (K+1)-th Largest Number

問題文
長さ N の数列 A=(A1,A2​,…,AN​) が与えられます。 K=0,1,2,…,N−1 のそれぞれについて、下記の問題を解いてください。1 以上 N 以下の整数 i であって、次の条件を満たすものの個数を求めよ。A に含まれる整数のうち A
iより大きいものはちょうど K 種類である。

考えたこと

まず問題文がわかりにくいので,理解するのに時間がかかる.

重複を消して,ソートし,二分探索した結果を配列に詰めていく.

そして,その配列をi-Nまで出現回数をカウントする.(ちなみにpythonのcount()を使ったらTLEだったので,Counterを使った.)


import bisect
import collections
N = int(input())
Alist = list(map(int,input().split()))
Blist = set(Alist)
Blist = sorted(Blist)
temp = len(Blist)
a = []
for i in range(N):
      #2分探索で境界がわかるので配列数から引くことによって境目を求める.
   a.append(temp-bisect.bisect(Blist,Alist[i]))
count = collections.Counter(a)
for i in range(N):
   print (count[i])

この記事が気に入ったらサポートをしてみませんか?