結果
問題 | No.1705 Mode of long array |
ユーザー | kohei2019 |
提出日時 | 2023-06-04 19:12:13 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 259 ms / 3,000 ms |
コード長 | 3,162 bytes |
コンパイル時間 | 397 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 94,592 KB |
最終ジャッジ日時 | 2024-06-09 04:01:10 |
合計ジャッジ時間 | 13,887 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 41 ms
52,096 KB |
testcase_01 | AC | 39 ms
52,864 KB |
testcase_02 | AC | 39 ms
52,480 KB |
testcase_03 | AC | 95 ms
75,904 KB |
testcase_04 | AC | 89 ms
76,544 KB |
testcase_05 | AC | 97 ms
76,032 KB |
testcase_06 | AC | 120 ms
76,800 KB |
testcase_07 | AC | 131 ms
76,288 KB |
testcase_08 | AC | 127 ms
76,544 KB |
testcase_09 | AC | 117 ms
76,672 KB |
testcase_10 | AC | 118 ms
76,288 KB |
testcase_11 | AC | 126 ms
76,416 KB |
testcase_12 | AC | 122 ms
76,160 KB |
testcase_13 | AC | 229 ms
90,240 KB |
testcase_14 | AC | 199 ms
83,328 KB |
testcase_15 | AC | 202 ms
78,988 KB |
testcase_16 | AC | 216 ms
79,656 KB |
testcase_17 | AC | 190 ms
78,376 KB |
testcase_18 | AC | 174 ms
78,312 KB |
testcase_19 | AC | 229 ms
80,616 KB |
testcase_20 | AC | 194 ms
79,588 KB |
testcase_21 | AC | 201 ms
88,320 KB |
testcase_22 | AC | 253 ms
93,568 KB |
testcase_23 | AC | 174 ms
76,256 KB |
testcase_24 | AC | 167 ms
76,160 KB |
testcase_25 | AC | 170 ms
76,160 KB |
testcase_26 | AC | 166 ms
76,160 KB |
testcase_27 | AC | 166 ms
76,416 KB |
testcase_28 | AC | 173 ms
76,032 KB |
testcase_29 | AC | 172 ms
76,416 KB |
testcase_30 | AC | 181 ms
76,032 KB |
testcase_31 | AC | 168 ms
76,160 KB |
testcase_32 | AC | 172 ms
76,340 KB |
testcase_33 | AC | 216 ms
94,336 KB |
testcase_34 | AC | 216 ms
94,080 KB |
testcase_35 | AC | 215 ms
93,952 KB |
testcase_36 | AC | 213 ms
94,336 KB |
testcase_37 | AC | 216 ms
94,080 KB |
testcase_38 | AC | 220 ms
93,952 KB |
testcase_39 | AC | 220 ms
94,592 KB |
testcase_40 | AC | 212 ms
94,080 KB |
testcase_41 | AC | 207 ms
94,080 KB |
testcase_42 | AC | 224 ms
94,592 KB |
testcase_43 | AC | 216 ms
94,592 KB |
testcase_44 | AC | 223 ms
94,336 KB |
testcase_45 | AC | 224 ms
94,592 KB |
testcase_46 | AC | 229 ms
94,336 KB |
testcase_47 | AC | 259 ms
94,336 KB |
testcase_48 | AC | 252 ms
93,952 KB |
testcase_49 | AC | 238 ms
94,464 KB |
testcase_50 | AC | 238 ms
94,080 KB |
testcase_51 | AC | 241 ms
94,464 KB |
testcase_52 | AC | 241 ms
94,464 KB |
testcase_53 | AC | 241 ms
94,208 KB |
ソースコード
class SegTree: DEFAULT = { 'min': 1 << 60, 'max': -(1 << 60), } FUNC = { 'min': min, 'max': max, } def __init__(self, ls, mode='min', func=None, default=None): """ 要素ls, 関数mode (min,max,sum,prd(product),gcd,lmc,^,&,|) func,defaultを指定すれば任意の関数、単位元での計算が可能 """ N = len(ls) if default == None: self.default = self.DEFAULT[mode] else: self.default = default if func == None: self.func = self.FUNC[mode] else: self.func = func self.N = N self.K = (N - 1).bit_length() self.N2 = 1 << self.K self.dat = [self.default] * (2**(self.K + 1)) for i in range(self.N): # 葉の構築 self.dat[self.N2 + i] = ls[i] self.build() def build(self): for j in range(self.N2 - 1, -1, -1): self.dat[j] = self.func(self.dat[j << 1], self.dat[j << 1 | 1]) # 親が持つ条件 def leafvalue(self, x): # リストのx番目の値 return self.dat[x + self.N2] def update(self, x, y): # index(x)をyに変更 i = x + self.N2 self.dat[i] = y while i > 0: # 親の値を変更 i >>= 1 self.dat[i] = self.func(self.dat[i << 1], self.dat[i << 1 | 1]) return def query(self, L, R): # [L,R)の区間取得 L += self.N2 R += self.N2 vL = self.default vR = self.default while L < R: if L & 1: vL = self.func(vL, self.dat[L]) L += 1 if R & 1: R -= 1 vR = self.func(self.dat[R], vR) L >>= 1 R >>= 1 return self.func(vL, vR) def find_r(self): """ max,minのインデックスを見つける(右優先) """ m_value = self.dat[1] ind = 1 while ind <= (2**(self.K)): ind_l = ind*2 ind_r = ind*2 + 1 if self.dat[ind_r] == m_value: ind = ind_r else: ind = ind_l return ind - 2**(self.K) def find_l(self): """ max,minのインデックスを見つける(左優先) """ m_value = self.dat[1] ind = 1 while ind <= (2**(self.K + 1)): ind_l = ind*2 ind_r = ind*2 + 1 if self.dat[ind_l] == m_value: ind = ind_l else: ind = ind_r return ind - 2**(self.K) def __iter__(self): for i in range(self.N): yield self[i] def __getitem__(self, x): return self.leafvalue(x) def __setitem__(self, x, val): return self.update(x, val) N,M = map(int,input().split()) lsA = [0]+list(map(int,input().split())) Q = int(input()) SG = SegTree(lsA,mode='max') ans = [] for i in range(Q): t,x,y = map(int,input().split()) if t == 1: SG[x] += y elif t == 2: SG[x] -= y else: ans.append(SG.find_r()) print(*ans,sep='\n')