結果

問題 No.2942 Sigma Music Game Level Problem
ユーザー PNJPNJ
提出日時 2024-10-18 22:23:54
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 3,195 ms / 6,000 ms
コード長 2,471 bytes
コンパイル時間 578 ms
コンパイル使用メモリ 82,280 KB
実行使用メモリ 248,640 KB
最終ジャッジ日時 2024-10-18 22:51:03
合計ジャッジ時間 30,953 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 46 ms
66,820 KB
testcase_01 AC 47 ms
67,216 KB
testcase_02 AC 52 ms
66,796 KB
testcase_03 AC 47 ms
66,944 KB
testcase_04 AC 48 ms
66,492 KB
testcase_05 AC 48 ms
67,000 KB
testcase_06 AC 47 ms
67,052 KB
testcase_07 AC 54 ms
71,424 KB
testcase_08 AC 95 ms
84,276 KB
testcase_09 AC 79 ms
81,712 KB
testcase_10 AC 72 ms
77,316 KB
testcase_11 AC 1,225 ms
192,824 KB
testcase_12 AC 2,715 ms
185,888 KB
testcase_13 AC 2,719 ms
122,660 KB
testcase_14 AC 1,291 ms
214,044 KB
testcase_15 AC 959 ms
203,348 KB
testcase_16 AC 2,545 ms
107,780 KB
testcase_17 AC 668 ms
122,472 KB
testcase_18 AC 1,916 ms
130,660 KB
testcase_19 AC 3,195 ms
140,848 KB
testcase_20 AC 902 ms
179,424 KB
testcase_21 AC 2,239 ms
248,640 KB
testcase_22 AC 2,162 ms
248,528 KB
testcase_23 AC 1,159 ms
114,608 KB
testcase_24 AC 47 ms
66,200 KB
testcase_25 AC 47 ms
66,344 KB
testcase_26 AC 2,227 ms
212,636 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def add(x,y):
  return x + y

class segtree():

  def __init__(self,n,op,e):
    self.n = n
    self.size = 1 << ((n - 1).bit_length())
    self.e = e
    self.seg = [e for i in range(self.size << 1)]
    self.op = op
  
  def set(self,i,x):
    j = i + self.size
    self.seg[j] = x
    j >>= 1
    while j:
      self.seg[j] = self.op(self.seg[j << 1],self.seg[(j << 1) ^ 1])
      j >>= 1
    return 0
  
  def add(self,i,x):
    self.set(i,self.get(i) + x)
    return
  
  def set_array(self,A):
    for i in range(self.n):
      self.set(i,A[i])
    return

  def get(self,i):
    return self.seg[i + self.size]
  
  def prod(self,l,r):
    sml = self.e
    smr = self.e
    ll = l + self.size
    rr = r + self.size
    while ll < rr:
      if ll & 1:
        sml = self.op(sml,self.seg[ll])
        ll += 1
      if rr & 1:
        smr = self.op(smr,self.seg[rr-1])
        rr -= 1
      ll >>= 1
      rr >>= 1
    return self.op(sml,smr)
  
  def max_right(self,l,f):
    if l == self.n:
      return self.n
    ll = l + self.size
    sm = self.e
    while True:
      while ll % 2 == 0:
        ll >>= 1
      if not(f(self.op(sm,self.seg[ll]))):
        while ll < self.size:
          ll <<= 1
          if f(self.op(sm,self.seg[ll])):
            sm = self.op(sm,self.seg[ll])
            ll += 1
        return ll - self.size
      sm = self.op(sm,self.seg[ll])
      ll += 1
      if (ll & -ll) == ll:
        break
    return self.n
  
  def min_left(self,r,f):
    if r == 0:
      return 0
    rr = r + self.size
    sm = self.e
    while True:
      rr -= 1
      while (rr > 1 and (rr % 2)):
        rr >>= 1
        if not(f(self.op(self.seg[rr],sm))):
          while (rr < self.size):
            rr = (rr << 1) + 1
            if self.op(sm,self.seg[rr]):
              sm = self.op(sm,self.seg[rr])
              rr -= 1
          return rr + 1 - self.size
        sm = self.op(sm,self.seg[rr])
      if (rr & -rr) == rr:
        break
    return 0

N,Q,L = map(int,input().split())
A = list(map(int,input().split()))
M = 200001
seg = segtree(M,add,0)
segg = segtree(M,add,0)
for a in A:
  seg.set(a,seg.get(a) + 1)
  segg.set(a,segg.get(a) + a)

f = 1
for _ in range(Q):
  q = list(map(int,input().split()))
  if q[0] == 1:
    l = q[1]
    seg.set(l,seg.get(l) + 1)
    segg.set(l,segg.get(l) + l)
  elif q[0] == 2:
    f = 0
    l,r = q[1],q[2]
    print(seg.prod(l,r + 1),segg.prod(l,r + 1))
  else:
    m = q[1]

if f:
  print('Not Found!')
0