結果
問題 | No.1975 Zigzag Sequence |
ユーザー |
![]() |
提出日時 | 2022-06-16 21:39:25 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 451 ms / 2,000 ms |
コード長 | 1,239 bytes |
コンパイル時間 | 228 ms |
コンパイル使用メモリ | 82,396 KB |
実行使用メモリ | 106,044 KB |
最終ジャッジ日時 | 2024-10-07 04:38:49 |
合計ジャッジ時間 | 11,205 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
import sysinput = sys.stdin.readlinefrom collections import defaultdictdef compress(l):l = list(set(l))l.sort()idx = defaultdict(int)for i in range(len(l)):idx[l[i]] = ireturn idxclass BIT:def __init__(self, n):self.n = nself.bit = [0]*(n+1)def add(self, i, x):i += 1while i<=self.n:self.bit[i] += xself.bit[i] %= MODi += i&(-i)def acc(self, i):s = 0while i>0:s += self.bit[i]i -= i&(-i)return sN = int(input())A = list(map(int, input().split()))ans = 0MOD = 10**9+7pos = defaultdict(list)for i in range(N):pos[A[i]].append(i)ks = list(pos.keys())ks.sort()bit1 = BIT(N)bit2 = BIT(N)for k in ks:for p in pos[k]:l = bit1.acc(p)r = bit2.acc(N)-bit2.acc(p)ans += l*r%MODans %= MODfor p in pos[k]:bit1.add(p, pow(2, p, MOD))bit2.add(p, pow(2, N-1-p, MOD))for p in pos[k]:l = pow(2, p, MOD)-1-bit1.acc(p)r = pow(2, N-p, MOD)-1-bit2.acc(N)+bit2.acc(p)ans += l*r%MODans %= MODprint(ans)