canuc80k4614·15/28

Hai Chỉ Số Tốt Nhất

Nộp bài trên LQDOJ

Bài 46 · SOS DP

Cho dãy được đánh chỉ số từ đến . Với mỗi số nguyên từ đến , xét mọi cặp chỉ số thỏa , trong đó | là OR bit. Hãy tìm giá trị lớn nhất của .

Input

  • Dòng đầu chứa . Dòng thứ hai chứa số .

Output

  • In dòng. Dòng thứ là đáp án ứng với giá trị .

Constraints

  • .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

2
1 4 2 3

Output

5
5
7

Giải thích: Với , chỉ cặp chỉ số hợp lệ nên đáp án là . Với , cặp vẫn tốt nhất và cho ; với , hai giá trị lớn nhất là , cho .

Lời giải tóm tắt
  • Phân tích: Với một mask m, điều kiện i|j là submask của m tương đương cả i và j đều là submask của m. Vì vậy chỉ cần biết hai giá trị lớn nhất ở các chỉ số submask của từng m. Điều kiện đề là bất đẳng thức số i|j≤K, nên sau đó phải lấy prefix maximum theo giá trị mask, không chỉ dùng riêng mask K.
  • Thuật toán: Mỗi trạng thái ban đầu giữ cặp (A_m,m). Chạy subset SOS, khi gộp chỉ giữ hai ứng viên có chỉ số khác nhau và giá trị lớn nhất. Gọi best[m] là tổng hai ứng viên của trạng thái m. Duyệt K=1..2^N-1, duy trì answer=max(answer,best[K]) và in prefix maximum.
  • Chứng minh đúng đắn: Sau SOS, trạng thái m đã nhận đúng mọi chỉ số submask của m; giữ hai giá trị lớn nhất là đủ để tối đa tổng của hai chỉ số phân biệt. Do đó best[m] là tốt nhất trong các cặp có i|j subseteq m, và đặc biệt mọi cặp có OR đúng m được xét tại trạng thái m.
  • Chứng minh đúng đắn: Một cặp hợp lệ cho truy vấn K có r=i|j≤K, nên xuất hiện trong best[r] và được prefix maximum xét. Ngược lại, mọi cặp tạo ra bởi best[m] với m≤K có i|j subseteq m, suy ra i|j≤m≤K, nên hợp lệ. Hai phía trùng nhau, vì vậy prefix maximum là đáp án.
  • Độ phức tạp: O(N·2^N) thời gian và O(2^N) bộ nhớ.