結果
問題 | No.1115 二つの数列 / Two Sequences |
ユーザー |
![]() |
提出日時 | 2020-09-27 21:08:01 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,120 bytes |
コンパイル時間 | 178 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 88,960 KB |
最終ジャッジ日時 | 2024-06-30 12:55:18 |
合計ジャッジ時間 | 7,750 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 5 |
other | RE * 35 |
ソースコード
from functools import reducefrom fractions import gcdfrom collections import defaultdictimport mathimport bisectimport itertoolsimport syssys.setrecursionlimit(10000000)input = sys.stdin.readlineINF = float("inf")def segfunc(x, y):return x + yclass SegmentTree:def __init__(self, arr, ini):size = len(arr)self.ini = iniself.n = 2 ** (size-1).bit_length()self.node = [self.ini] * (2*self.n - 1)# print(self.n)# print(self.node)for i in range(size):self.node[i+self.n-1] = arr[i]for i in reversed(range(self.n-2)):self.node[i] = segfunc(self.node[2*i+1], self.node[2*i+2])def update(self, x, val):x += (self.n - 1)self.node[x] = valwhile x > 0:x = (x - 1) // 2self.node[x] = segfunc(self.node[2*x+1], self.node[2*x+2])def add(self, x, val):x += (self.n - 1)self.node[x] += valwhile x > 0:x = (x - 1) // 2self.node[x] = segfunc(self.node[2*x+1], self.node[2*x+2])def get_point(self, x):return self.node[x + self.n - 1]def query(self, a, b):res = self.inil = self.n - 1 + ar = self.n - 1 + (b-1)while l <= r:if l == r:res = segfunc(res, self.node[l])breakif l % 2 == 0:res = segfunc(res, self.node[l])if r % 2 == 1:res = segfunc(res, self.node[r])l = l // 2r = r // 2 - 1return res# 処理内容def main():N = int(input())A = list(map(int, input().split()))B = list(map(int, input().split()))d = defaultdict(int)for i in range(N):d[A[i]] = iC = [0] * Nfor i in range(N):C[i] = d[B[i]]seg = SegmentTree([0]*100010, 0)ans = 0for i in range(N):seg.add(C[i], 1)ans += i + 1 - seg.query(0, C[i]+1)print(ans)if __name__ == '__main__':main()