結果

問題 No.230 Splarraay スプラレェーイ
ユーザー ああいいああいい
提出日時 2022-01-07 10:48:05
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
TLE  
実行時間 -
コード長 1,643 bytes
コンパイル時間 168 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 30,336 KB
最終ジャッジ日時 2024-04-26 07:38:06
合計ジャッジ時間 26,661 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 29 ms
30,336 KB
testcase_01 AC 28 ms
11,136 KB
testcase_02 AC 29 ms
11,008 KB
testcase_03 AC 29 ms
11,008 KB
testcase_04 AC 27 ms
11,008 KB
testcase_05 AC 57 ms
11,136 KB
testcase_06 AC 348 ms
11,264 KB
testcase_07 AC 49 ms
11,008 KB
testcase_08 AC 73 ms
11,008 KB
testcase_09 AC 3,551 ms
15,104 KB
testcase_10 AC 1,648 ms
11,136 KB
testcase_11 AC 2,041 ms
13,056 KB
testcase_12 AC 3,593 ms
15,104 KB
testcase_13 AC 523 ms
11,520 KB
testcase_14 AC 1,911 ms
19,328 KB
testcase_15 TLE -
testcase_16 TLE -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #


class SegTree:
    def __init__(self,n):
        k = 1
        while k < n:
            k <<= 1
        self.n = k
        self.dat = [0] * (2 * self.n - 1)
        self.lazy = [0] * (2 * self.n - 1)
    def eval(self,k,l,r):
        if self.lazy[k] == -1:return
        if k < self.n-1:
            self.lazy[k*2+1] = self.lazy[k]
            self.lazy[k*2+2] = self.lazy[k]
        self.dat[k] = self.lazy[k] * (r-l)
        self.lazy[k] = -1
    def update(self,a,b,x,k=0,l=0,r=-1):
        if r == -1:r = self.n
        self.eval(k,l,r)
        if r <= a or b <= l:return
        if a <= l and r <= b:
            self.lazy[k] = x
            self.eval(k,l,r)
            return
        self.update(a,b,x,k*2+1,l,(l+r)//2)
        self.update(a,b,x,k*2+2,(l+r)//2,r)
        self.dat[k] = self.dat[k*2+1]+self.dat[k*2+2]
    def getsum(self,a,b,k=0,l=0,r=-1):
        if r == -1:r = self.n
        self.eval(k,l,r)
        if r <= a or b <= l:return 0
        if a <= l and r <= b:
            return self.dat[k]
        return self.getsum(a,b,k*2+1,l,(l+r)//2)+self.getsum(a,b,k*2+2,(l+r)//2,r)

N = int(input())
Q = int(input())
sega = SegTree(N)
segb = SegTree(N)
pointa = 0
pointb = 0
for _ in range(Q):
    x,l,r = map(int,input().split())
    r += 1
    if x == 0:
        a = sega.getsum(l,r)
        b = segb.getsum(l,r)
        if a < b:
            pointb += b
        elif b < a:
            pointa += a
    elif x == 1:
        sega.update(l,r,1)
        segb.update(l,r,0)
    else:
        sega.update(l,r,0)
        segb.update(l,r,1)
a = sega.getsum(0,N)
b  =segb.getsum(0,N)
pointa += a
pointb += b
print(pointa,pointb)
0