結果
問題 | No.2650 [Cherry 6th Tune *] セイジャク |
ユーザー |
|
提出日時 | 2024-02-23 21:58:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,421 ms / 2,500 ms |
コード長 | 2,647 bytes |
コンパイル時間 | 329 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 175,072 KB |
最終ジャッジ日時 | 2024-09-30 13:43:12 |
合計ジャッジ時間 | 36,518 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 31 |
ソースコード
#int(input())#map(int, input().split())#list(map(int, input().split()))#区間更新用def segfunc(x,y):return max(x,y)class LazySegTree_RUQ:def __init__(self,init_val,segfunc,ide_ele):n = len(init_val)self.segfunc = segfuncself.ide_ele = ide_eleself.num = 1<<(n-1).bit_length()self.tree = [ide_ele]*2*self.numself.lazy = [None]*2*self.numfor i in range(n):self.tree[self.num+i] = init_val[i]for i in range(self.num-1,0,-1):self.tree[i] = self.segfunc(self.tree[2*i],self.tree[2*i+1])def gindex(self,l,r):l += self.numr += self.numlm = l>>(l&-l).bit_length()rm = r>>(r&-r).bit_length()while r>l:if l<=lm:yield lif r<=rm:yield rr >>= 1l >>= 1while l:yield ll >>= 1def propagates(self,*ids):for i in reversed(ids):v = self.lazy[i]if v is None:continueself.lazy[i] = Noneself.lazy[2*i] = vself.lazy[2*i+1] = vself.tree[2*i] = vself.tree[2*i+1] = vdef update(self,l,r,x):ids = self.gindex(l,r)self.propagates(*self.gindex(l,r))l += self.numr += self.numwhile l<r:if l&1:self.lazy[l] = xself.tree[l] = xl += 1if r&1:self.lazy[r-1] = xself.tree[r-1] = xr >>= 1l >>= 1for i in ids:self.tree[i] = self.segfunc(self.tree[2*i], self.tree[2*i+1])def query(self,l,r):ids = self.gindex(l,r)self.propagates(*self.gindex(l,r))res = self.ide_elel += self.numr += self.numwhile l<r:if l&1:res = self.segfunc(res,self.tree[l])l += 1if r&1:res = self.segfunc(res,self.tree[r-1])l >>= 1r >>= 1return resN, A = map(int, input().split())X = list(map(int, input().split()))T = int(input())l = [0] * Tfor i in range(T):l[i] = list(map(int, input().split()))x = set(X)for i in range(T):x.add(l[i][0])x.add(l[i][1])x = sorted(x)ll = len(x)d = dict()for i in range(ll):d[x[i]] = is = LazySegTree_RUQ([-1] * ll, segfunc, -1)for i in range(T):L, R = l[i]s.update(d[L], d[R]+1, i+1)for i in range(N):print(s.query(d[X[i]], d[X[i]]+1))