Buggy python submission (verdict: Time Limit Exceeded):
def main():
    D = int(input())
    c_list = list(map(int, input().split()))
    s_list = [list(map(int, input().split())) for _ in range(D)]
    t_list = [int(input()) for _ in range(D)]

    #res_list = []
    M = int(input())
    for m in range(M):
        d,q = map(int, input().split())
        t_list[d-1] = q
        res = 0
        
        last_open = [0] * 26
        for i in range(D):
            t = t_list[i]
            res += s_list[i][t-1]

            # TODO: ここは毎回26ループ回す必要がないところになりうるので改善可能かも(なおすだけで20回分の処理が消せる)
            bad = 0
            last_open[t-1] = i+1
            for ci in range(26):
                bad += c_list[ci]*(i+1 - last_open[ci])

            res -= bad

        print(res)

if __name__ == "__main__":
    main()

Fixed submission:

def main():
    D = int(input())
    c_list = list(map(int, input().split()))
    s_list = [list(map(int, input().split())) for _ in range(D)]
    t_list = [int(input()) for _ in range(D)]

    basic_bad = sum(c_list)
    #res_list = []
    M = int(input())
    for m in range(M):
        d,q = map(int, input().split())
        t_list[d-1] = q
        res = 0
        
        bad = 0
        last_open = [0] * 26
        for i in range(D):
            t = t_list[i]
            res += s_list[i][t-1]

            # TODO: ここは毎回26ループ回す必要がないところになりうるので改善可能かも(なおすだけで20回分の処理が消せる)
            # bad = 0
            # for ci in range(26):
            #     bad += c_list[ci]*(i+1 - last_open[ci])
            bad += basic_bad - (i+1 - last_open[t-1]) * c_list[t-1]
            last_open[t-1] = i+1

            res -= bad

        print(res)

if __name__ == "__main__":
    main()

Buggy python submission (verdict: Time Limit Exceeded):

D = int(input())
c_list = list(map(int, input().split()))
s_list = [list(map(int, input().split())) for _ in range(D)]
t_list = [int(input()) for _ in range(D)]


#res_list = []
M = int(input())
for m in range(M):
    d,q = map(int, input().split())
    t_list[d-1] = q
    res = 0
    
    last_open = [0] * 26
    for i in range(D):
        t = t_list[i]
        res += s_list[i][t-1]

        bad = 0
        last_open[t-1] = i+1
        for ci in range(26):
            bad += c_list[ci]*(i+1 - last_open[ci])

        res -= bad

    print(res)
    #res_list.append(res)
#print(res_list)


Fixed submission:

def main():
    D = int(input())
    c_list = list(map(int, input().split()))
    s_list = [list(map(int, input().split())) for _ in range(D)]
    t_list = [int(input()) for _ in range(D)]

    basic_bad = sum(c_list)
    #res_list = []
    M = int(input())
    for m in range(M):
        d,q = map(int, input().split())
        t_list[d-1] = q
        res = 0
        
        bad = 0
        last_open = [0] * 26
        for i in range(D):
            t = t_list[i]
            res += s_list[i][t-1]

            # TODO: ここは毎回26ループ回す必要がないところになりうるので改善可能かも(なおすだけで20回分の処理が消せる)
            # bad = 0
            # for ci in range(26):
            #     bad += c_list[ci]*(i+1 - last_open[ci])
            bad += basic_bad - (i+1 - last_open[t-1]) * c_list[t-1]
            last_open[t-1] = i+1

            res -= bad

        print(res)

if __name__ == "__main__":
    main()