結果

問題 No.1975 Zigzag Sequence
ユーザー prussian_coder
提出日時 2022-06-10 22:57:04
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 331 ms / 2,000 ms
コード長 1,199 bytes
コンパイル時間 228 ms
コンパイル使用メモリ 82,432 KB
実行使用メモリ 134,016 KB
最終ジャッジ日時 2024-09-21 06:44:43
合計ジャッジ時間 8,272 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 33
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

class Bit:
def __init__(self, n):
self.size = n
self.tree = [0] * (n + 1)
self.depth = n.bit_length()
def sum(self, i):
s = 0
while i > 0:
s += self.tree[i]
i -= i & -i
return s
def add(self, i, x):
while i <= self.size:
self.tree[i] += x
i += i & -i
def lower_bound(self, x):
#xi
sum_ = 0
pos = 0
for i in range(self.depth, -1, -1):
k = pos + (1 << i)
if k <= self.size and sum_ + self.tree[k] < x:
sum_ += self.tree[k]
pos += 1 << i
return pos + 1, sum_
N=int(input())
A=[int(x) for x in input().split()]
D={j:i for i,j in enumerate(sorted(set(A)))}
E={i:j for i,j in enumerate(sorted(set(A)))}
M=len(D)
left_up=[0]*N
left_down=[0]*N
right_up=[0]*N
right_down=[0]*N
L=Bit(M)
R=Bit(M)
l=1
mod=10**9+7
for i in range(N):
left_down[i]=L.sum(D[A[i]])
left_up[i]=L.sum(M)-L.sum(D[A[i]]+1)
L.add(D[A[i]]+1,l)
l=l*2%mod
r=1
for i in range(N):
j=-i-1
right_down[j]=R.sum(D[A[j]])
right_up[j]=R.sum(M)-R.sum(D[A[j]]+1)
R.add(D[A[j]]+1,r)
r=r*2%mod
print(sum([(left_up[i]*right_up[i]+left_down[i]*right_down[i])%mod for i in range(N)])%mod)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0