01/10/2018, 11:36

Xin hướng làm bài tập (C++)

Cho N đoạn số nguyên [ai,bi]. Tìm 1 số mà số đó thuộc nhiều đoạn số nguyên nhất
VD: N=5
[0:10], [2;3] , [4;7], [3;5], [5;8] => 5

Nguyễn Đình Biển viết 13:42 ngày 01/10/2018

Gộp chung a[i] và b[i] vào rồi Sort, đếm xuối đến biến a[i] bất kì tăng biến count lên 1, b[i] bất kì giảm đi 1, kết quả là điểm mà giá trị count cực đại.

Trần Hoàn viết 13:43 ngày 01/10/2018
  1. Tìm số nhỏ nhất trong các đoạn số nguyên, gọi là max
  2. Tìm số lớn nhất trong các đoạn số nguyên, gọi là min
  3. Tạo một mảng có max - min + 1 phần tử, gọi là mảng DanhSachSo
  4. Duyệt qua các số trong các mảng, với mỗi số n được duyệt thì tăng DanhSachSo[n - min] thêm 1
  5. Tìm số lớn nhất trong DanhSachSo, index của số đó trong DanhSachSo cộng với min chính là kết quả cần tìm.
rogp10 viết 13:38 ngày 01/10/2018

Cho số từ 1 đến 1e10 thôi là hết mem, bó tay

HK boy viết 13:50 ngày 01/10/2018

Dùng map được mà bác, nhưng mà sợ không gánh nổi độ phức tạp thời gian (quá to!).

rogp10 viết 13:40 ngày 01/10/2018

Nên chọn cách nào có độ phức tạp chỉ phụ thuộc số đoạn.

Bài liên quan
0