Submission #72539097


Source Code Expand

N=int(input())
S=list(input())
D=[0]
for i in range(N) :
    if S[i]=="A" :
        D.append(D[-1]-1000000+1)
    elif S[i]=="B" :
        D.append(D[-1]+1000000+1)
    else :
        D.append(D[-1]+1)
class BIT:
    def __init__(self, N):
        self.N = N
        self.bits = [0] * (self.N + 1)
        
    def update(self, i, x):
        while i <= self.N:
            self.bits[i] += x
            i += i & -i
    
    def total(self, i):
        res = 0
        
        while i > 0:
            res += self.bits[i]
            i -= i & -i
            
        return res
def binary_search(data, value):
    left = 0            # 探索する範囲の左端を設定
    right = len(data) - 1            # 探索する範囲の右端を設定
    while left <= right:
        mid = (left + right) // 2            # 探索する範囲の中央を計算
        if data[mid] == value:
            # 中央の値と一致した場合は位置を返す
            return mid
        elif data[mid] < value:
            # 中央の値より大きい場合は探索範囲の左を変える
            left = mid + 1
        else:
            # 中央の値より小さい場合は探索範囲の右を変える
            right = mid - 1
    return -1            # 見つからなかった場合
#これは事故らない二分探索です
def binary_min(data, lower_bound):
    value=lower_bound
    left = 0            # 探索する範囲の左端を設定
    right = len(data) - 1            # 探索する範囲の右端を設定
    while left < right:
        mid = (left + right) // 2# 探索する範囲の中央を計算
        if data[mid] < value:
            # 中央の値より大きい場合は探索範囲の左を変える
            left = mid +1
        else:
            # 中央の値より小さい場合は探索範囲の右を変える
            right = mid
    mid = (left + right) // 2
    return mid            # 見つからなかった場合
#これは事故らない二分探索です
def binary_max(data, upper_bound):
    value=upper_bound
    left = 0            # 探索する範囲の左端を設定
    right = len(data) - 1            # 探索する範囲の右端を設定
    while left < right:
        mid = (left + right+1) // 2# 探索する範囲の中央を計算
        if data[mid] > value:
            # 中央の値より大きい場合は探索範囲の左を変える
            right = mid -1
        else:
            # 中央の値より小さい場合は探索範囲の右を変える
            left = mid
    mid = (left + right) // 2
    return mid            # 見つからなかった場合
def compression(data) :
    V=data.copy()
    V=sorted(V)
    last="^o^"
    E=[]
    F=[]
    for i in range(len(V)):
        if V[i]!=last :
            E.append(V[i])
        last=V[i]
    for i in range(len(V)) :
        F.append(binary_search(E,data[i]))
    return  F
N +=1
bits = BIT(N)
S = sorted(list(set(D)))
ranking = {x:i+1 for i,x in enumerate(S)}
E = []
for a in D:
  E.append(ranking[a])

count = 0

for i in range(N - 1, -1, -1):
    count += bits.total(E[i] - 1)
    bits.update(E[i], 1)
print(count)

Submission Info

Submission Time
Task E - A > B substring
User Youteru
Language Python (PyPy 3.11-v7.3.20)
Score 450
Code Size 3280 Byte
Status AC
Exec Time 320 ms
Memory 358476 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 3
AC × 35
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 48 ms 80252 KiB
00_sample_01.txt AC 47 ms 80340 KiB
00_sample_02.txt AC 48 ms 80332 KiB
01_random_03.txt AC 320 ms 357796 KiB
01_random_04.txt AC 319 ms 358116 KiB
01_random_05.txt AC 318 ms 357916 KiB
01_random_06.txt AC 319 ms 357264 KiB
01_random_07.txt AC 318 ms 357776 KiB
01_random_08.txt AC 318 ms 356916 KiB
01_random_09.txt AC 319 ms 358476 KiB
01_random_10.txt AC 319 ms 356344 KiB
01_random_11.txt AC 320 ms 358100 KiB
01_random_12.txt AC 319 ms 358084 KiB
01_random_13.txt AC 318 ms 357356 KiB
01_random_14.txt AC 316 ms 355492 KiB
01_random_15.txt AC 316 ms 357976 KiB
01_random_16.txt AC 264 ms 238796 KiB
01_random_17.txt AC 203 ms 244476 KiB
01_random_18.txt AC 175 ms 231360 KiB
01_random_19.txt AC 173 ms 229392 KiB
01_random_20.txt AC 188 ms 245160 KiB
01_random_21.txt AC 217 ms 239940 KiB
01_random_22.txt AC 135 ms 183000 KiB
01_random_23.txt AC 136 ms 182968 KiB
01_random_24.txt AC 261 ms 355764 KiB
01_random_25.txt AC 261 ms 271412 KiB
01_random_26.txt AC 304 ms 273116 KiB
01_random_27.txt AC 292 ms 273756 KiB
01_random_28.txt AC 314 ms 273212 KiB
01_random_29.txt AC 269 ms 266056 KiB
01_random_30.txt AC 265 ms 266000 KiB
01_random_31.txt AC 250 ms 266296 KiB
01_random_32.txt AC 48 ms 80136 KiB
01_random_33.txt AC 48 ms 80212 KiB
01_random_34.txt AC 47 ms 80164 KiB