Submission #72560401
Source Code Expand
import sys
import string
import math
import bisect
import os
import heapq
import operator
from io import BytesIO, IOBase
from heapq import heappop,heappush
from functools import lru_cache,cache
from copy import copy,deepcopy
from collections import deque,defaultdict,Counter
from itertools import permutations,combinations
from array import array
INF = float('inf')
BUFSIZE = 8192
class FastIO(IOBase):
newlines = 0
def __init__(self, file):
self._file = file
self._fd = file.fileno()
self.buffer = BytesIO()
self.writable = "x" in file.mode or "r" not in file.mode
self.write = self.buffer.write if self.writable else None
def read(self):
while True:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
if not b:
break
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines = 0
return self.buffer.read()
def readline(self):
while self.newlines == 0:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
self.newlines = b.count(b"\n") + (not b)
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines -= 1
return self.buffer.readline()
def flush(self):
if self.writable:
os.write(self._fd, self.buffer.getvalue())
self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
def __init__(self, file):
self.buffer = FastIO(file)
self.flush = self.buffer.flush
self.writable = self.buffer.writable
self.write = lambda s: self.buffer.write(s.encode("ascii"))
self.read = lambda: self.buffer.read().decode("ascii")
self.readline = lambda: self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = sys.stdin.buffer.readline
ask = lambda *x:print('?',*x,flush=True)
reply = lambda *x:print('!',*x,flush=True)
RI = lambda: int(sys.stdin.readline())
RF = lambda: float(sys.stdin.readline())
RS = lambda: sys.stdin.readline().strip()
RFF = lambda: map(float, sys.stdin.readline().split())
RII = lambda: map(int, sys.stdin.readline().split())
RSS = lambda: map(str, sys.stdin.readline().strip().split())
RIL = lambda: list(RII())
RFL = lambda: list(RFF())
RSL = lambda: list(RSS())
from types import GeneratorType
def bootstrap(f, stack=[]):
def wrappedfunc(*args, **kwargs):
if stack:
return f(*args, **kwargs)
else:
to = f(*args, **kwargs)
while True:
if type(to) is GeneratorType:
stack.append(to)
to = next(to)
else:
stack.pop()
if not stack:
break
to = stack[-1].send(to)
return to
return wrappedfunc
class LazySegmentTree:
def __init__(self, A):
self.n = len(A)
self.A = A
self.N = self.n * 4
self.S = [self.Node() for _ in range(self.N)]
self.build(0, self.n - 1, 1)
class Node:
def __init__(self):
""" 放默认值 """
self.f = 0 # max
self.g = 0 # count
self.ll = 1
self.l1 = 0
self.l2 = False
def modify_leaf(self, a: Node, i):
""" 根据 A[i] 修改叶子 """
a.f = self.A[i]
def merge(self, a: Node,b: Node,c: Node):
""" 将 b,c 的信息合并到 a """
a.f = max(b.f,c.f)
a.ll = b.ll+c.ll
a.g = b.g+c.g
def pushdown(self, a: Node,b: Node,c: Node):
""" 将 a 的懒惰信息下传到 b,c """
if a.l2==True:
b.g = b.ll-b.g
c.g = c.ll-c.g
b.f = 0
c.f = 0
b.l1 = 0
c.l1 = 0
b.l2 = True
c.l2 = True
a.l2 = False
if a.l1!=0:
b.l1 += a.l1
c.l1 += a.l1
if b.g!=b.ll:
b.f += a.l1
if c.g!=c.ll:
c.f += a.l1
a.l1 = 0
def build(self, l, r, p):
if l == r:
self.modify_leaf(self.S[p], l)
return
m = (l + r) >> 1
self.build(l, m, p << 1)
self.build(m + 1, r, p << 1 | 1)
self.merge(self.S[p], self.S[p << 1], self.S[p << 1 | 1])
def update1(self ,x, y, val):
""" 更新位置 [x,y] 的节点 """
if x>y:
return
self._update1(x, y, 0, self.n-1, 1, val)
def _update1(self, x, y, l, r, p:int, val):
if r-l+1>=2:
self.pushdown(self.S[p], self.S[p << 1], self.S[p << 1 | 1])
m = (l + r) >> 1
pp = p<<1
if m-l+1>=2:
self.pushdown(self.S[pp], self.S[pp << 1], self.S[pp << 1 | 1])
pp = p<<1|1
if r-(m+1)+1>=2:
self.pushdown(self.S[pp], self.S[pp << 1], self.S[pp << 1 | 1])
if x <= l and y >= r:
""" 这里写相应的区间修改 """
if self.S[p].g<self.S[p].ll:
self.S[p].f += val
self.S[p].l1 += val
return
m = (l + r) >> 1
if x <= m:
self._update1(x, y, l, m, p << 1, val)
if y >= m + 1:
self._update1(x, y, m + 1, r, p << 1 | 1, val)
self.merge(self.S[p], self.S[p << 1], self.S[p << 1 | 1])
def update2(self ,x, y):
""" 更新位置 [x,y] 的节点 """
if x>y:
return
self._update2(x, y, 0, self.n-1, 1)
def _update2(self, x, y, l, r, p:int):
if r-l+1>=2:
self.pushdown(self.S[p], self.S[p << 1], self.S[p << 1 | 1])
m = (l + r) >> 1
pp = p<<1
if m-l+1>=2:
self.pushdown(self.S[pp], self.S[pp << 1], self.S[pp << 1 | 1])
pp = p<<1|1
if r-(m+1)+1>=2:
self.pushdown(self.S[pp], self.S[pp << 1], self.S[pp << 1 | 1])
if x <= l and y >= r:
""" 这里写相应的区间修改 """
self.S[p].g = self.S[p].ll-self.S[p].g
self.S[p].l2 = True
self.S[p].l1 = 0
self.S[p].f = 0
return
m = (l + r) >> 1
if x <= m:
self._update2(x, y, l, m, p << 1)
if y >= m + 1:
self._update2(x, y, m + 1, r, p << 1 | 1)
self.merge(self.S[p], self.S[p << 1], self.S[p << 1 | 1])
def query(self, x, y):
""" 查询区间[x, y]的信息 """
return self._query(x,y,0,self.n-1,1)
def _query(self, x, y, l, r, p):
if x <= l and y >= r:
return self.S[p]
m = (l + r) >> 1
self.pushdown(self.S[p], self.S[p << 1], self.S[p << 1 | 1])
b = self.Node()
c = self.Node()
if x <= m:
b = self._query(x, y, l, m, p << 1)
if y >= m + 1:
c = self._query(x, y, m + 1, r, p << 1 | 1)
a = self.Node()
self.merge(a, b, c)
return a
def main():
n,q = RII()
a = [0]*(n+1)
d = LazySegmentTree(a)
for _ in range(q):
inp = RIL()
if inp[0]==1:
l,r,x = inp[1:]
l -= 1
r -= 1
d.update1(l,r,x)
if inp[0]==2:
l,r = inp[1:]
l -= 1
r -= 1
d.update2(l,r)
if inp[0]==3:
l,r = inp[1:]
l -= 1
r -= 1
ans = d.query(l,r).f
print(ans)
if __name__ == '__main__':
main()
Submission Info
| Submission Time |
|
| Task |
G - Takoyaki and Flip |
| User |
x3x3 |
| Language |
Python (PyPy 3.11-v7.3.20) |
| Score |
0 |
| Code Size |
8125 Byte |
| Status |
WA |
| Exec Time |
> 2000 ms |
| Memory |
227340 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
0 / 575 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 01_random_40.txt, 01_random_41.txt, 01_random_42.txt, 01_random_43.txt, 01_random_44.txt, 01_random_45.txt, 01_random_46.txt, 01_random_47.txt, 01_random_48.txt, 01_random_49.txt, 01_random_50.txt, 01_random_51.txt, 01_random_52.txt, 01_random_53.txt, 01_random_54.txt, 01_random_55.txt, 01_random_56.txt, 01_random_57.txt, 01_random_58.txt, 01_random_59.txt, 01_random_60.txt, 01_random_61.txt, 01_random_62.txt, 01_random_63.txt, 01_random_64.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_00.txt |
AC |
112 ms |
110136 KiB |
| 00_sample_01.txt |
AC |
115 ms |
109984 KiB |
| 00_sample_02.txt |
AC |
116 ms |
110072 KiB |
| 01_random_03.txt |
TLE |
> 2000 ms |
225276 KiB |
| 01_random_04.txt |
TLE |
> 2000 ms |
224728 KiB |
| 01_random_05.txt |
TLE |
> 2000 ms |
225920 KiB |
| 01_random_06.txt |
TLE |
> 2000 ms |
225624 KiB |
| 01_random_07.txt |
TLE |
> 2000 ms |
225240 KiB |
| 01_random_08.txt |
TLE |
> 2000 ms |
225756 KiB |
| 01_random_09.txt |
TLE |
> 2000 ms |
225364 KiB |
| 01_random_10.txt |
TLE |
> 2000 ms |
225632 KiB |
| 01_random_11.txt |
TLE |
> 2000 ms |
225512 KiB |
| 01_random_12.txt |
TLE |
> 2000 ms |
225244 KiB |
| 01_random_13.txt |
TLE |
> 2000 ms |
225244 KiB |
| 01_random_14.txt |
TLE |
> 2000 ms |
225256 KiB |
| 01_random_15.txt |
TLE |
> 2000 ms |
225420 KiB |
| 01_random_16.txt |
WA |
1197 ms |
155592 KiB |
| 01_random_17.txt |
WA |
1972 ms |
153944 KiB |
| 01_random_18.txt |
WA |
1719 ms |
179928 KiB |
| 01_random_19.txt |
WA |
1748 ms |
164480 KiB |
| 01_random_20.txt |
WA |
1803 ms |
167868 KiB |
| 01_random_21.txt |
TLE |
> 2000 ms |
150924 KiB |
| 01_random_22.txt |
WA |
671 ms |
197536 KiB |
| 01_random_23.txt |
WA |
695 ms |
138144 KiB |
| 01_random_24.txt |
TLE |
> 2000 ms |
225832 KiB |
| 01_random_25.txt |
TLE |
> 2000 ms |
226728 KiB |
| 01_random_26.txt |
TLE |
> 2000 ms |
227092 KiB |
| 01_random_27.txt |
TLE |
> 2000 ms |
226628 KiB |
| 01_random_28.txt |
TLE |
> 2000 ms |
225788 KiB |
| 01_random_29.txt |
TLE |
> 2000 ms |
226652 KiB |
| 01_random_30.txt |
TLE |
> 2000 ms |
226276 KiB |
| 01_random_31.txt |
TLE |
> 2000 ms |
226576 KiB |
| 01_random_32.txt |
WA |
1232 ms |
172716 KiB |
| 01_random_33.txt |
WA |
1691 ms |
196612 KiB |
| 01_random_34.txt |
WA |
1614 ms |
142400 KiB |
| 01_random_35.txt |
WA |
1287 ms |
158752 KiB |
| 01_random_36.txt |
WA |
1782 ms |
203592 KiB |
| 01_random_37.txt |
TLE |
> 2000 ms |
226700 KiB |
| 01_random_38.txt |
TLE |
> 2000 ms |
226764 KiB |
| 01_random_39.txt |
TLE |
> 2000 ms |
227340 KiB |
| 01_random_40.txt |
TLE |
> 2000 ms |
226612 KiB |
| 01_random_41.txt |
TLE |
> 2000 ms |
227016 KiB |
| 01_random_42.txt |
TLE |
> 2000 ms |
226892 KiB |
| 01_random_43.txt |
TLE |
> 2000 ms |
227016 KiB |
| 01_random_44.txt |
TLE |
> 2000 ms |
227224 KiB |
| 01_random_45.txt |
WA |
1437 ms |
203964 KiB |
| 01_random_46.txt |
WA |
1258 ms |
177092 KiB |
| 01_random_47.txt |
WA |
1510 ms |
203388 KiB |
| 01_random_48.txt |
WA |
1805 ms |
145244 KiB |
| 01_random_49.txt |
WA |
1158 ms |
164100 KiB |
| 01_random_50.txt |
AC |
658 ms |
213744 KiB |
| 01_random_51.txt |
AC |
675 ms |
213356 KiB |
| 01_random_52.txt |
AC |
680 ms |
213408 KiB |
| 01_random_53.txt |
TLE |
> 2000 ms |
225356 KiB |
| 01_random_54.txt |
TLE |
> 2000 ms |
224340 KiB |
| 01_random_55.txt |
TLE |
> 2000 ms |
224988 KiB |
| 01_random_56.txt |
TLE |
> 2000 ms |
224992 KiB |
| 01_random_57.txt |
TLE |
> 2000 ms |
224932 KiB |
| 01_random_58.txt |
WA |
1395 ms |
162612 KiB |
| 01_random_59.txt |
WA |
1402 ms |
190224 KiB |
| 01_random_60.txt |
WA |
1413 ms |
220552 KiB |
| 01_random_61.txt |
AC |
1336 ms |
217512 KiB |
| 01_random_62.txt |
AC |
1407 ms |
215892 KiB |
| 01_random_63.txt |
AC |
1460 ms |
215820 KiB |
| 01_random_64.txt |
AC |
167 ms |
117304 KiB |