結果
問題 | No.2065 Sum of Min |
ユーザー |
|
提出日時 | 2022-09-04 11:15:35 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 717 ms / 2,000 ms |
コード長 | 1,527 bytes |
コンパイル時間 | 416 ms |
コンパイル使用メモリ | 82,456 KB |
実行使用メモリ | 97,024 KB |
最終ジャッジ日時 | 2024-11-18 13:14:50 |
合計ジャッジ時間 | 15,208 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
#BIT plus verclass BITplus:def __init__(self,N):self.N = Nself.bit = [0] * (self.N+1)def add(self,i,x):while i <= self.N:self.bit[i] += xi += i & -idef fold(self,i):ans = 0while i > 0:ans += self.bit[i]i -= i & -ireturn ansdef lb(self,w):if w <= 0:return 0x = 0k = 1while k <= self.N:k <<= 1k >>= 1while k:if x + k <= self.N and self.bit[x+k] < w:w -= self.bit[x+k]x += kk >>= 1return x + 1#サイズ N の配列をいれるdef build(self,seq):bit = self.bitN = self.Nfor i in range(N):bit[i+1] = seq[i]for i in range(1,N+1):if i + (i & -1) <= N:bit[i + (i & -i)] += bit[i]N,Q = map(int,input().split())A = list(map(int,input().split()))B = [(A[i],i) for i in range(N)]B.sort(reverse = True)query = []querysub = []for i in range(Q):l,r,x, = map(int,input().split())query.append((l,r))querysub.append((x,i))querysub.sort()ans = [0] * Qbit = BITplus(N)bitn = BITplus(N)for x,i in querysub:l,r = query[i]while B and B[-1][0] <= x:a,j = B.pop()bit.add(j+1,a)bitn.add(j+1,1)s = bit.fold(r) - bit.fold(l-1)n = bitn.fold(r) - bitn.fold(l-1)ans[i] = s + (r - l + 1 - n) * xfor a in ans:print(a)