結果
問題 | No.2650 [Cherry 6th Tune *] セイジャク |
ユーザー |
![]() |
提出日時 | 2024-02-23 21:58:51 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,249 ms / 2,500 ms |
コード長 | 2,395 bytes |
コンパイル時間 | 365 ms |
コンパイル使用メモリ | 82,828 KB |
実行使用メモリ | 104,400 KB |
最終ジャッジ日時 | 2024-09-29 06:35:28 |
合計ジャッジ時間 | 29,971 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 31 |
ソースコード
import sysinput = sys.stdin.readlinen,a=map(int,input().split())x=list(map(int,input().split()))class LazySegTree:def __init__(self, N, func, intv):self.intv = intvself.func = funcself.LV = (N-1).bit_length()self.N0 = 2**self.LVself.data = [intv]*(2*self.N0)self.lazy = [None]*(2*self.N0)def gindex(self, l, r):L = (l + self.N0) >> 1; R = (r + self.N0) >> 1lc = 0 if l & 1 else (L & -L).bit_length()rc = 0 if r & 1 else (R & -R).bit_length()v = 2for i in range(self.LV):if rc <= i:yield Rif L < R and lc <= i:yield LL >>= 1; R >>= 1; v <<= 1def propagates(self, *ids):for i in reversed(ids):v = self.lazy[i-1]if v is None:continueself.lazy[2*i-1] = self.data[2*i-1] = self.lazy[2*i] = self.data[2*i] = v >> 1self.lazy[i-1] = Nonedef update(self, l, r, x):*ids, = self.gindex(l, r)self.propagates(*ids)L = self.N0 + l; R = self.N0 + rv = xwhile L < R:if R & 1:R -= 1self.lazy[R-1] = self.data[R-1] = vif L & 1:self.lazy[L-1] = self.data[L-1] = vL += 1L >>= 1; R >>= 1; v <<= 1for i in ids:self.data[i-1] = self.func(self.data[2*i-1], self.data[2*i])def query(self, l, r):self.propagates(*self.gindex(l, r))L = self.N0 + l; R = self.N0 + rs = self.intvwhile L < R:if R & 1:R -= 1s = self.func(s, self.data[R-1])if L & 1:s = self.func(s, self.data[L-1])L += 1L >>= 1; R >>= 1return sdef segfunc(x, y):return x + yxx=[]for i in range(n):xx.append((x[i],i))xx.sort()x.sort()inv=[0]*nfor i in range(n):inv[xx[i][1]]=ist=LazySegTree(n,segfunc,0)t=int(input())from bisect import bisect_left, bisect_right, insortfor i in range(t):l,r=map(int,input().split())id1=bisect_left(x,l)if id1==n:continueid2=bisect_right(x,r)-1st.update(id1,id2+1,i+1)for i in range(n):ans=st.query(inv[i],inv[i]+1)if ans==0:print(-1)else:print(ans)