Hướng dẫn bài BIT - Phép toán thao tác bit

Trùm CUỐI 2020-10-23 17:22:45 2020-10-23 17:23:34

Link đến bài BIT - Phép toán thao tác bit

Subtask \#1 dễ dàng giải được với ĐPT O(n^4) ;
Subtask \#2 với L=R , có thể giải được với ĐPT O(n^3)
Xét trường hợp tổng quát:

Với mỗi 0\le x\le 1024 (chỉ xét 10 bit):

  • Gọi f[i][x] là số giá trị a_j=x với j\le i ;
  • Gọi g[i][x] là số cặp i_1 < i_2 \le i a_{i_1}\text{ and }a_{i_2}=x ;
  • Gọi h[i][x] là số bộ i_1 < i_2 <i_3 \le i (a_{i_1}\text{ and }a_{i_2}) \text{ or } a_{i_3}=x ;
  • Gọi t[i][x] là số bộ i_1 < i_2 <i_3 < i_4 \le i ((a_{i_1}\text{ and }a_{i_2}) \text{ or } a_{i_3}) \text{ xor } a_{i_4}=x ;

Ta có thể tính toán các mảng f, g, h, t trong thời gian O(n \times v_{max}) (với v_{max} là giá trị lớn nhất của R ).

Kết quả bài toán là t[n][L] + t[n][L + 1] + \dots + t[n][R] .