Submission #25825782


Source Code Expand

import sys
import numpy as np
from numba import njit, i8

MOD = 998_244_353

@njit
def get_sum(bit, i):
    """sum on [0, i)"""
    s = 0
    while i:
        s += bit[i]
        i -= i & -i
    return s

@njit
def add(bit, i, x=1):
    assert 0 <= i < len(bit) - 1
    i += 1
    while i < len(bit):
        bit[i] += x
        i += i & -i

@njit((i8[:], i8[:, :]), cache=True)
def main(A, query):
    # 座標圧縮
    X = np.unique(np.concatenate((A, query[:, 1])))
    A = np.searchsorted(X, A)
    query[:, 1] = np.searchsorted(X, query[:, 1])
    
    # 個数と和を fenwick tree で持つ
    bit_c = np.zeros(len(X) + 10, np.int64)
    bit_s = np.zeros(len(X) + 10, np.int64)    
    total_c = 0
    total_s = 0
    ANS = 0
    
    def upd(i, k):
        nonlocal ANS, total_c, total_s
        # 多重集合に X[i] を k 個追加する。
        left_c = get_sum(bit_c, i)
        left_s = get_sum(bit_s, i)
        right_c = total_c - left_c
        right_s = total_s - left_s
        
        diff_sum = left_c * X[i] - left_s
        diff_sum += right_s - right_c * X[i]
        # 2 で割る
        if diff_sum & 1:
            diff_sum += MOD
        diff_sum //= 2
        
        ANS = (ANS + k * diff_sum) % MOD
        add(bit_c, i, k)
        add(bit_s, i, X[i] * k)
        total_c += k
        total_s += X[i] * k
        
    for i in A:
        upd(i, 1)

    for q in range(len(query)):
        x, y = query[q]
        x -= 1
        upd(A[x], -1)
        A[x] = y
        upd(A[x], 1)
        print(ANS)

N, Q = map(int, sys.stdin.readline().split())
A = np.array(sys.stdin.readline().split(), np.int64)
query = np.array(sys.stdin.read().split(), np.int64).reshape(Q, 2)

main(A, query)

Submission Info

Submission Time
Task E - Infinite Operations
User maspy
Language Python (3.8.2)
Score 800
Code Size 1794 Byte
Status AC
Exec Time 1121 ms
Memory 184056 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 2
AC × 52
Set Name Test Cases
Sample 01_sample_01.txt, 01_sample_02.txt
All 01_sample_01.txt, 01_sample_02.txt, 02_small_01.txt, 02_small_02.txt, 02_small_03.txt, 02_small_04.txt, 02_small_05.txt, 02_small_06.txt, 02_small_07.txt, 02_small_08.txt, 02_small_09.txt, 03_rand_01.txt, 03_rand_02.txt, 03_rand_03.txt, 03_rand_04.txt, 03_rand_05.txt, 03_rand_06.txt, 03_rand_07.txt, 03_rand_08.txt, 03_rand_09.txt, 03_rand_10.txt, 03_rand_11.txt, 03_rand_12.txt, 03_rand_13.txt, 03_rand_14.txt, 03_rand_15.txt, 03_rand_16.txt, 03_rand_17.txt, 03_rand_18.txt, 03_rand_19.txt, 03_rand_20.txt, 03_rand_21.txt, 03_rand_22.txt, 03_rand_23.txt, 03_rand_24.txt, 03_rand_25.txt, 03_rand_26.txt, 03_rand_27.txt, 03_rand_28.txt, 03_rand_29.txt, 03_rand_30.txt, 04_rand_dense_01.txt, 04_rand_dense_02.txt, 04_rand_dense_03.txt, 04_rand_dense_04.txt, 04_rand_dense_05.txt, 04_rand_dense_06.txt, 04_rand_dense_07.txt, 04_rand_dense_08.txt, 04_rand_dense_09.txt, 04_rand_dense_10.txt, 05_handmade_01.txt
Case Name Status Exec Time Memory
01_sample_01.txt AC 478 ms 106480 KiB
01_sample_02.txt AC 458 ms 107784 KiB
02_small_01.txt AC 462 ms 106932 KiB
02_small_02.txt AC 461 ms 107664 KiB
02_small_03.txt AC 459 ms 107660 KiB
02_small_04.txt AC 457 ms 107004 KiB
02_small_05.txt AC 464 ms 106996 KiB
02_small_06.txt AC 460 ms 106456 KiB
02_small_07.txt AC 458 ms 107004 KiB
02_small_08.txt AC 459 ms 107260 KiB
02_small_09.txt AC 461 ms 107240 KiB
03_rand_01.txt AC 1048 ms 182540 KiB
03_rand_02.txt AC 945 ms 178756 KiB
03_rand_03.txt AC 936 ms 184056 KiB
03_rand_04.txt AC 943 ms 179516 KiB
03_rand_05.txt AC 990 ms 179332 KiB
03_rand_06.txt AC 1102 ms 183240 KiB
03_rand_07.txt AC 1012 ms 179184 KiB
03_rand_08.txt AC 1007 ms 180032 KiB
03_rand_09.txt AC 920 ms 177992 KiB
03_rand_10.txt AC 1034 ms 182060 KiB
03_rand_11.txt AC 945 ms 179440 KiB
03_rand_12.txt AC 1009 ms 179028 KiB
03_rand_13.txt AC 1017 ms 178424 KiB
03_rand_14.txt AC 1062 ms 180768 KiB
03_rand_15.txt AC 896 ms 177412 KiB
03_rand_16.txt AC 911 ms 178936 KiB
03_rand_17.txt AC 1105 ms 183736 KiB
03_rand_18.txt AC 1007 ms 179844 KiB
03_rand_19.txt AC 1059 ms 181808 KiB
03_rand_20.txt AC 955 ms 180264 KiB
03_rand_21.txt AC 1092 ms 182244 KiB
03_rand_22.txt AC 936 ms 179616 KiB
03_rand_23.txt AC 1071 ms 181712 KiB
03_rand_24.txt AC 993 ms 178600 KiB
03_rand_25.txt AC 1121 ms 182148 KiB
03_rand_26.txt AC 1117 ms 182652 KiB
03_rand_27.txt AC 1068 ms 181884 KiB
03_rand_28.txt AC 991 ms 180444 KiB
03_rand_29.txt AC 988 ms 179764 KiB
03_rand_30.txt AC 942 ms 178792 KiB
04_rand_dense_01.txt AC 856 ms 178836 KiB
04_rand_dense_02.txt AC 836 ms 180280 KiB
04_rand_dense_03.txt AC 868 ms 181364 KiB
04_rand_dense_04.txt AC 820 ms 178452 KiB
04_rand_dense_05.txt AC 848 ms 183652 KiB
04_rand_dense_06.txt AC 840 ms 179576 KiB
04_rand_dense_07.txt AC 804 ms 178984 KiB
04_rand_dense_08.txt AC 900 ms 181836 KiB
04_rand_dense_09.txt AC 807 ms 178728 KiB
04_rand_dense_10.txt AC 902 ms 181872 KiB
05_handmade_01.txt AC 863 ms 168512 KiB