Prefixmaxxing#12421

Prefixmaxxing (Həll təhlili)

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:

  1. 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.

  2. 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.

  3. Massiv işlənəndən sonra:

    • ans = c + \max(dp_i)

Mürəkkəblik: hər test üçün .