結果

問題 No.2650 [Cherry 6th Tune *] セイジャク
コンテスト
ユーザー flippergo
提出日時 2026-10-18 11:27:03
言語 PyPy3
(8.0.0 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 593 ms / 2,500 ms
+ 743µs
コード長 1,356 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 84 ms
コンパイル使用メモリ 64,640 KB
実行使用メモリ 113,884 KB
最終ジャッジ日時 2026-10-18 11:27:27
合計ジャッジ時間 23,266 ms
ジャッジサーバーID
(参考情報)
judge5_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from bisect import bisect_left,bisect_right
N,A = map(int,input().split())
X = [-1]+list(map(int,input().split()))
T = int(input())
B = [list(map(int,input().split())) for _ in range(T)]
C = set(X[:])
for l,r in B:
    C.add(l)
    C.add(r)
C = sorted(list(C))
DX = {}
DL = [0]*T
DR = [0]*T
for i in range(1,N+1):
    ind = bisect_left(C,X[i])
    DX[X[i]] = ind
for t in range(T):
    Lt,Rt = B[t]
    indL = bisect_left(C,Lt)
    indR = bisect_left(C,Rt)
    DL[t] = indL
    DR[t] = indR
M = len(X)+2*T
K = 0
while (1<<K) <= M:
    K += 1
M = 1<<K
BIT = [0]*(M+1)
def bit_add(i,x):
    while i<=M:
        BIT[i] += x
        i += i&(-i)
def bit_cumsum(i):
    cnt = 0
    while i>0:
        cnt += BIT[i]
        i -= i&(-i)
    return cnt
for i in range(1,N+1):
    ind = DX[X[i]]
    bit_add(ind,1)
ans = {}
def bit_find(ind):
    low = ind-1
    high = M
    while high-low>1:
        cum_low = bit_cumsum(ind-1)
        mid = (high+low)//2
        if bit_cumsum(mid)>cum_low:
            high = mid
        else:
            low = mid
    return high

for t in range(T,0,-1):
    indL = DL[t-1]
    indR = DR[t-1]
    S = bit_cumsum(indR)-bit_cumsum(indL-1)
    while S>0:
        ind = bit_find(indL)
        ans[C[ind]] = t
        bit_add(ind,-1)
        S = bit_cumsum(indR)-bit_cumsum(indL-1)
for i in range(1,N+1):
    print(ans.get(X[i],-1))
0