Tìm đoạn có tổng dương dài nhất

Với bài này thì với n<=10^5 em làm được rồi nhưng với 10^6 thì chưa được. Mong anh chị chỉ giúp em thuật toán để vượt qua với ạ. Độ phức tạp là O(n). Em cảm ơn!

1 Like

Bài này làm cây BIT bạn nhé. ĐPT: N*log2(N). Chắc chắn qua. Nhưng phải kết hợp với rời rạc hóa bằng cách chặt nhị phân bạn nhé

  1. Tính suffix sum S[1…n]
  2. Bài toán đưa về tìm i - j max sao cho S[i] > S[j] (và i > j)
    Dạng này ta dùng hai mảng scan max-min ngược chiều nhau.

Time: 3n + 2*O(n)[1] lần đọc mem, 3n lần ghi mem
Space: 3n + O(1) slot mem (cấp phát 16n bytes)

[1] nếu ghi best - worst thì nó ra 3n - 5n nhưng lại mất đi phần 2 nhân.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?