A : 몇 번째 자리에서 자를지 brute force


B : 각 prefix마다 (prefix의 0개수 <= 전체 1개수)와 (prefix의 1개수 <= 전체 0개수)를 만족하는지 검사하기


C : 길이가 30인 count array를 관리하기

GET w query가 들어올 때마다 작은 bit부터 보면서, w를 만들기 위해 i번째 bit를 사용해야 하면 반드시 사용하고, 남은 개수는 합쳐서 i+1번째 bit로 넘겨주기


D : cartesian tree를 만들면 root를 기준으로 두 개의 subtree로 independent하게 partition되니 각각에서 recursive하게 해결하기

min value를 안 지우는 경우의 수, min value를 왼쪽에서 지우는 경우의 수, min value를 오른쪽에서 지우는 경우의 수를 계산하고 중복되는 경우의 수 제거


E : row,column을 vertex로 생각하고 a_{i,j}를 row i와 column j를 잇는 edge로 생각한 뒤 MCMF

a_{i,j} = 0이라면 1로 바꾸는 연산이 1 cost

a_{i,j} = 1이라면 일단 0으로 바꾸어서 1 cost를 미리 지불하고, 나중에 0을 다시 1로 바꾸는 연산이 -1 cost

row,column의 1 개수 제약을 capacity로 설정하면 max flow를 달성했을 때의 min cost가 정답


F : 몰라