Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [C] Đếm số đoạn liên tiếp có cực đại bằng a[i]

    Cho dãy aaa gồm nnn số. Với mỗi vị trí iii, hãy đếm số đoạn liên tiếp (sub-array) mà phần tử cực đại bằng đúng aia_iai​, sao cho mỗi đoạn được tính cho đúng một iii (tránh đếm trùng khi có giá trị lặp).

    Gợi ý: với mỗi iii, gọi LLL = chỉ số gần nhất bên trái có aL>aia_L > a_iaL​>ai​ (hoặc −1-1−1); RRR = chỉ số gần nhất bên phải có aR≥aia_R \ge a_iaR​≥ai​ (hoặc nnn). Số đoạn được tính là (i−L)(R−i)(i - L)(R - i)(i−L)(R−i). Tổng các giá trị này luôn bằng (n+12)\binom{n+1}{2}(2n+1​).

    Ví dụ: a=[3,1,4,2]a = [3, 1, 4, 2]a=[3,1,4,2] ⇒ i=0⇒2i=0\Rightarrow 2i=0⇒2, i=1⇒1i=1\Rightarrow 1i=1⇒1, i=2⇒6i=2\Rightarrow 6i=2⇒6, i=3⇒1i=3\Rightarrow 1i=3⇒1, tổng 101010.

    • Định dạng đầu vào:
      • Dòng 1: số nguyên nnn.
      • Dòng 2: nnn số nguyên cách nhau dấu cách.
    • Ràng buộc đầu vào:

      1≤n≤10001 \le n \le 10001≤n≤1000; −109≤ai≤109-10^9 \le a_i \le 10^9−109≤ai​≤109.

    • Định dạng đầu ra:
      • Dòng 1: nnn giá trị (số đoạn ứng với từng iii) cách nhau dấu cách.
      • Dòng 2: tổng các giá trị đó.

    Ví dụ:

    Đầu vào:

    4
    3 1 4 2
    

    Đầu ra:

    2 1 6 1
    10

    Giải thích:

    a=[3,1,4,2]: số đoạn mà cực đại = a[i] lần lượt là 2,1,6,1; tổng 10 = C(5,2).

    Đang tải editor...