No.1673 Lamps on a line

yukicoder.me


まずは二つのコードを
AC

N,Q = map(int,input().split())
switch = [0]*(N)
ans = 0

for i in range(Q):
    L,R = map(int,input().split())
    for j in range(L-1,R):
        if switch[j] == 0:
            switch[j] = 1
            ans += 1
        else:
            switch[j] = 0
            ans -= 1
    print(ans)


TLE

N,Q = map(int,input().split())
switch = [0]*(N)
for i in range(Q):
    L,R = map(int,input().split())
    for j in range(L-1,R):
        if switch[j] == 0:
            switch[j] = 1
        else:
            switch[j] = 0
    print(switch.count(1))

二つのコードは、1の個数の数え方だけ異なる
変数をインクリメントするか、count()メソッドで数えるか
覚えたてのメソッドってなぜか使いたくなっちゃいますもんね
僕だけかもしれないけど

ただし今回はNの数が増えるにつれて、count()メソッドがネックになっています
count()は中身をすべて確認し、該当する要素数を出力してくれるので、
Nが大きくなればなるほど、計算量が増えます
なので今回は、0を1にするタイミングで変数にインクリメントして実装

※ count()メソッドは文字列にも使うことができるので、
  厳密に言うと要素数を出力という説明は不自然かもしれませんが、
  わかりやすく説明するために、そのような表現を使わせていただきました