Submission #69497956


Source Code Expand

class LazySegTree:
  def __init__(self, op, e, mapping, composition, id_, v):
    self._op = op
    self._e = e
    self._mapping = mapping
    self._composition = composition
    self._id = id_
    if isinstance(v, int):
      v = [e] * v
    self._n = len(v)
    self._log = (self._n-1).bit_length()
    self._size = 1 << self._log
    self._d = [e] * (2 * self._size)
    self._lz = [self._id] * self._size
    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._n
    p += self._size
    for i in range(self._log, 0, -1):
      self._push(p >> i)
    self._d[p] = x
    for i in range(1, self._log + 1):
      self._update(p >> i)

  def get(self, p):
    assert 0 <= p < self._n
    p += self._size
    for i in range(self._log, 0, -1):
      self._push(p >> i)
    return self._d[p]

  def prod(self, left, right):
    assert 0 <= left <= right <= self._n
    if left == right:
      return self._e
    left += self._size
    right += self._size
    for i in range(self._log, 0, -1):
      if ((left >> i) << i) != left:
        self._push(left >> i)
      if ((right >> i) << i) != right:
        self._push((right - 1) >> i)
    sml = self._e
    smr = self._e
    while left < right:
      if left & 1:
        sml = self._op(sml, self._d[left])
        left += 1
      if right & 1:
        right -= 1
        smr = self._op(self._d[right], smr)
      left >>= 1
      right >>= 1
    return self._op(sml, smr)

  def all_prod(self):
    return self._d[1]

  def apply(self, left, right, f):
    assert f is not None
    if right is None:
      p = left
      assert 0 <= left < self._n
      p += self._size
      for i in range(self._log, 0, -1):
        self._push(p >> i)
      self._d[p] = self._mapping(f, self._d[p])
      for i in range(1, self._log + 1):
        self._update(p >> i)
    else:
      assert 0 <= left <= right <= self._n
      if left == right:
        return
      left += self._size
      right += self._size
      for i in range(self._log, 0, -1):
        if ((left >> i) << i) != left:
          self._push(left >> i)
        if ((right >> i) << i) != right:
          self._push((right - 1) >> i)
      l2 = left
      r2 = right
      while left < right:
        if left & 1:
          self._all_apply(left, f)
          left += 1
        if right & 1:
          right -= 1
          self._all_apply(right, f)
        left >>= 1
        right >>= 1
      left = l2
      right = r2
      for i in range(1, self._log + 1):
        if ((left >> i) << i) != left:
          self._update(left >> i)
        if ((right >> i) << i) != right:
          self._update((right - 1) >> i)

  def max_right(self, left, g):
    assert 0 <= left <= self._n
    assert g(self._e)
    if left == self._n:
      return self._n
    left += self._size
    for i in range(self._log, 0, -1):
      self._push(left >> i)
    sm = self._e
    first = True
    while first or (left & -left) != left:
      first = False
      while left % 2 == 0:
        left >>= 1
      if not g(self._op(sm, self._d[left])):
        while left < self._size:
          self._push(left)
          left *= 2
          if g(self._op(sm, self._d[left])):
            sm = self._op(sm, self._d[left])
            left += 1
        return left - self._size
      sm = self._op(sm, self._d[left])
      left += 1
    return self._n

  def min_left(self, right, g):
    assert 0 <= right <= self._n
    assert g(self._e)
    if right == 0:
      return 0
    right += self._size
    for i in range(self._log, 0, -1):
      self._push((right - 1) >> i)
    sm = self._e
    first = True
    while first or (right & -right) != right:
      first = False
      right -= 1
      while right > 1 and right % 2:
        right >>= 1
      if not g(self._op(self._d[right], sm)):
        while right < self._size:
          self._push(right)
          right = 2 * right + 1
          if g(self._op(self._d[right], sm)):
            sm = self._op(self._d[right], sm)
            right -= 1
        return right + 1 - self._size
      sm = self._op(self._d[right], sm)
    return 0

  def _update(self, k):
    self._d[k] = self._op(self._d[2 * k], self._d[2 * k + 1])

  def _all_apply(self, k, f):
    self._d[k] = self._mapping(f, self._d[k])
    if k < self._size:
      self._lz[k] = self._composition(f, self._lz[k])

  def _push(self, k):
    self._all_apply(2 * k, self._lz[k])
    self._all_apply(2 * k + 1, self._lz[k])
    self._lz[k] = self._id


n, q = map(int, input().split())
Q = [tuple(map(int, input().split())) for _ in range(q)]
seg = LazySegTree(
  op = lambda x, y: x+y, 
  e = 0, 
  mapping = lambda x, y: x+y, 
  composition = lambda x, y: x+y, 
  id_ = 0, 
  v = [0]*n 
)

mod = 998244353
p = 1007
now = 1
for i, (l, r) in enumerate(Q):
  l -= 1
  r -= 1
  if seg.get(l)==seg.get(r):
    seg.apply(l, r+1, now)
    now = now*p%mod
    print('Yes')
  else:
    print('No')

Submission Info

Submission Time
Task F - Adding Chords
User uparupaaa
Language Python (PyPy 3.10-v7.3.12)
Score 525
Code Size 5197 Byte
Status AC
Exec Time 2066 ms
Memory 265468 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 2
AC × 34
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All min.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, sample_01.txt, sample_02.txt
Case Name Status Exec Time Memory
min.txt AC 57 ms 76704 KiB
random_01.txt AC 558 ms 142632 KiB
random_02.txt AC 259 ms 123256 KiB
random_03.txt AC 532 ms 140428 KiB
random_04.txt AC 419 ms 133328 KiB
random_05.txt AC 541 ms 142524 KiB
random_06.txt AC 386 ms 130916 KiB
random_07.txt AC 542 ms 142256 KiB
random_08.txt AC 451 ms 136916 KiB
random_09.txt AC 533 ms 142964 KiB
random_10.txt AC 180 ms 119256 KiB
random_11.txt AC 611 ms 141592 KiB
random_12.txt AC 347 ms 124992 KiB
random_13.txt AC 661 ms 142348 KiB
random_14.txt AC 551 ms 136228 KiB
random_15.txt AC 649 ms 141528 KiB
random_16.txt AC 524 ms 118728 KiB
random_17.txt AC 610 ms 142692 KiB
random_18.txt AC 611 ms 142872 KiB
random_19.txt AC 730 ms 142432 KiB
random_20.txt AC 665 ms 142856 KiB
random_21.txt AC 525 ms 142756 KiB
random_22.txt AC 1034 ms 183948 KiB
random_23.txt AC 468 ms 142356 KiB
random_24.txt AC 1223 ms 187100 KiB
random_25.txt AC 447 ms 142300 KiB
random_26.txt AC 2049 ms 265468 KiB
random_27.txt AC 2066 ms 264684 KiB
random_28.txt AC 377 ms 143580 KiB
random_29.txt AC 374 ms 143600 KiB
random_30.txt AC 512 ms 143820 KiB
random_31.txt AC 510 ms 143712 KiB
sample_01.txt AC 58 ms 76680 KiB
sample_02.txt AC 79 ms 113548 KiB