atcoder (abc77 C)Snuke Festival のpythonによる解答
問題
atcoder.jp
・前提:この問題は二分探索を使う。
・考え方:Bを1つ決めてそれをB[i]とする。Aの中のB[i]より小さい値の数をbiaとする。Cの中のB[i]より大きい値の数をbicとする。biaとbicを掛け算したものが答えとなりあとはiをforで回せば良い。
・例:A=1,5,B=2,4,C=3,6でB[i]=2のとき、B[i]より小さいAは1、B[i]より大きいCは3,6となり、(1,2,3),(1,2,6)が答え、つまりbia*bic=1*2=2となる。B[i]=4のときも同様。
・実装例
import bisect N=int(input()) A=list(map(int,input().split())) B=list(map(int,input().split())) C=list(map(int,input().split())) A.sort() B.sort() C.sort() ans=0 for i in range(N): #真ん中決め打ち bia=bisect.bisect_left(A,B[i]) bic=N-bisect.bisect_right(C,B[i]) ans+=bia*bic print(ans)