canuc80k6004·5/15

Chuỗi Điểm Ba Chiều

Nộp bài trên LQDOJ

Bài 60 · CDQ Divide and Conquer

Description

Mỗi test gồm điểm khác nhau trong không gian ba chiều. Một điểm có thể đứng ngay trước khi cả ba tọa độ đều không giảm. Hãy tìm số điểm lớn nhất có thể chọn thành một chuỗi và số tập điểm đạt độ dài đó; hai phương án khác nhau nếu tập điểm được chọn khác nhau.

Input

  • Dòng đầu chứa .
  • Mỗi test chứa và bộ ba tọa độ.

Output

  • Mỗi test in : độ dài lớn nhất và số phương án modulo .

Constraints

  • .
  • trong mỗi test.
  • .
  • Không có hai điểm trùng hoàn toàn trong cùng test.

Scoring

  • Subtask ( số điểm): dữ liệu nhỏ theo giới hạn được công bố trong hệ thống chấm.
  • Subtask ( số điểm): không có giới hạn bổ sung.

Example

Test 1

Input

1
4
1 1 1
2 2 2
2 3 1
3 3 3

Output

3 2

Giải thích: Có hai chuỗi dài : chọn điểm đầu, một trong hai điểm ở giữa, rồi điểm cuối. Không thể dùng đồng thời hai điểm giữa vì tọa độ thứ ba giảm theo một hướng, nên kết quả là .

Lời giải tóm tắt
  • Mô hình và thuật toán: Sắp điểm theo bộ ba. CDQ-DP hoàn tất nửa trái, dùng Fenwick lưu cặp (độ dài lớn nhất, số cách) để chuyển sang nửa phải theo hai tọa độ còn lại, rồi giải nửa phải.
  • Chứng minh tính đúng đắn: Thứ tự sắp là một thứ tự topo của quan hệ không giảm. Mỗi chuyển trạng thái từ chỉ số trái sang phải được xử lý đúng một lần; Fenwick trả phép gộp tốt nhất trên miền tiền tố. Quy tắc gộp giữ độ dài lớn hơn và cộng số cách khi bằng nhau.
  • Độ phức tạp: O(N log² N) thời gian mỗi test và O(N) bộ nhớ sau nén tọa độ.
  • Lỗi thường gặp: Một lỗi tự nhiên là tính đúng độ dài nhưng luôn cho rằng chỉ có một phương án tối ưu.