Problem Müəllifi: | De3b0o |
Hazırlayan: | De3b0o |
Redaktə edən: | Hasan Saleh (MathModel) |
Həll
Fakt: əgər indeksində əməliyyat aparırıqsa, həmişə optimal seçim x = \max(a_1,a_2,...,a_{i-1}) olur.
Sübut:
İki hal var:
Əgər əvvəlcə a_i \le \max(a_1,a_2,...,a_{i-1}) olarsa, onda x = \max(a_1,a_2,...,a_{i-1}) seçmək mog dəyərini artırır.
Əks halda, əgər a_i > \max(a_1,a_2,...,a_{i-1}) olarsa, x = \max(a_1,a_2,...,a_{i-1}) seçilməsi prefix üçün mog dəyərini dəyişməz saxlayır, amma -dən sonra yeni maksimumların yaranmasına imkan verərək bütün massiv üzrə mog dəyərini artıra bilər.
Alqoritm:
Massivi soldan sağa keçərək aşağıdakıları saxlayın:
: indiyə qədərki maksimum.
: cari maksimumdan əvvəlki ikinci ən böyük dəyər.
: cari mog dəyəri (indiyə qədər yeni maksimumların sayı).
: son maksimumun indeksi.
Hər üçün:
Əgər mx1 \le a_i isə, bu yeni maksimumdur:
-ni artırın.
mx2 = mx1, mx1 = a_i edin.
id = i edin.
Əks halda, əgər mx2 \le a_i \le mx1 isə:
dp_{id}-ni artırın.
mx2 = a_i edin.
Massiv işlənəndən sonra:
ans = c + \max(dp_i)
Mürəkkəblik: hər test üçün .