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!
Tìm đoạn có tổng dương dài nhất
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é
- Tính suffix sum S[1…n]
- 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?