연산 전의 값을 S0이라 하자. Ax,k=a와 Bk,x=b를 교환하고 d=b−a라 하자. 교환 후 Ax,k는 d만큼 증가하고 Bk,x는 d만큼 감소한다.
S에 포함된 원소 중 x번째 행에서 대각선 오른쪽에 있는 원소의 변화량 합은
dj=x+1∑NBk,j
이고, x번째 열에서 대각선 위쪽에 있는 원소의 변화량 합은
−di=1∑x−1Ai,k
이다. 대각 원소에서는 Ax,kBk,x=ab가 교환 후에도 이므로 변화량이 이다. 따라서 전체 변화량은
Δx,k=(B
이다.
A의 열별 앞쪽 누적합과 B의 행별 뒤쪽 누적합을 다음과 같이 정의한다.
Pi,k=r=1
P0,k=0, Qk,N+1으로 두면 각 변화량은
Δx,k=(Bk,
로 O(1)에 계산할 수 있다.
초기 합도 행렬곱 전체를 만들 필요 없이 합의 순서를 바꾸어 계산한다.
S0=i=1∑N
연산을 하지 않는 경우를 포함해야 하므로 정답은
S0+max(0,1≤x,k≤N
이다. 시간 복잡도와 공간 복잡도는 모두 O(N2)이다.
Solution written by GPT6