Editorial for Kế hoạch luyện tập


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Authors: khactrung1912

Subtask 1

Xét tất cả các cặp \(1 \leq i \leq j \leq N\) và duyệt từ \(i\) đến \(j\) để tính tổng của đoạn \([i,j]\) và kiểm tra xem có thoả mãn điều kiện đề bài hay không.
Độ phức tạp thời gian : \(O(N^3)\)

Subtask 2

Ý tưởng tương tự Subtask \(1\), tuy nhiên ta cần tính tổng đoạn \([i..j]\) trong \(O(1)\) bằng cách khi \(j\) đi qua phần tử nào thì ta cộng phần tử đó vào tổng \([i..j]\)
Độ phức tạp thời gian \(O(N^2)\)

Subtask 3

Với \(\sum_{i=1}^{n}\), ta sẽ tìm vị trí \(j \leq i\) lớn nhất mà thoả mãn điều kiện bằng cách chặt nhị phân.
Nói cách khác, gọi \(prefix(i,j)\) là tổng các phần tử trong đoạn \([i..j]\), ta tìm \(j \leq i\) lớn nhất sao cho \(prefix(j,i) \geq S\).
Độ phức tạp thời gian: \((O(N.log_2(N))\)

Subtask 4

Áp dụng ý tưởng của Subtask \(3\), tuy nhiên ta thấy rằng nếu đoạn \([j..i]\) thoả mãn thì \(\sum_{k=i}^{n}\) \(prefix(j,k)\) đều thoả mãn, nên ta sẽ sử dụng hai con trỏ.
Độ phức tạp thời gian: \(O(N)\)



Comments

There are no comments at the moment.