結果
問題 | No.2796 Small Matryoshka |
ユーザー |
|
提出日時 | 2024-06-28 22:30:32 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,620 ms / 2,000 ms |
コード長 | 2,008 bytes |
コンパイル時間 | 128 ms |
コンパイル使用メモリ | 82,464 KB |
実行使用メモリ | 129,980 KB |
最終ジャッジ日時 | 2024-06-28 22:30:52 |
合計ジャッジ時間 | 14,474 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
class SegTree:def __init__(self, op, e, n, v=None):self._n = nself._op = opself._e = eself._log = (n - 1).bit_length()self._size = 1 << self._logself._d = [self._e] * (2 * self._size)if v is not None:for i in range(self._n):self._d[self._size + i] = v[i]for i in range(self._size - 1, 0, -1):self._update(i)def set(self, p, x):assert 0 <= p < self._np += self._sizeself._d[p] = xfor i in range(1, self._log + 1):self._update(p >> i)def get(self, p):assert 0 <= p < self._nreturn self._d[p + self._size]def prod(self, l, r):assert 0 <= l <= r <= self._nsml, smr = self._e, self._el += self._sizer += self._sizewhile l < r:if l & 1:sml = self._op(sml, self._d[l])l += 1if r & 1:r -= 1smr = self._op(self._d[r], smr)l >>= 1r >>= 1return self._op(sml, smr)def all_prod(self):return self._d[1]def _update(self, k):self._d[k] = self._op(self._d[2 * k], self._d[2 * k + 1])#https://qiita.com/AkariLuminous/items/32cbf5bc3ffb2f84a898N=int(input())Q=[]for i in range(N):r,R=list(map(int,input().split()))Q.append((r,R))Q=sorted(Q)maxr=Q[-1][0]check=set()ans=-1def MAX(a,b):return max(a,b)STST=SegTree(MAX,-10**18,N)for i in range(N):STST.set(i,Q[i][0])#print(Q)for i in range(N):if i in check:continueans+=1now=Q[i][1]check.add(i)while now<=maxr:ng=iok=N-1while abs(ok-ng)>1:m=(ok+ng)//2#print(ok,ng)#print(i,m,STST.prod(i,m+1))if STST.prod(i,m+1)>=now:ok=m#print(m)else:ng=mcheck.add(ok)STST.set(ok,-10**18)now=Q[ok][1]#print(i,ok)print(ans)