Mở rộng cực trị

Đề bài

Mô tả

Với một mảng b gồm các số nguyên dương, ta định nghĩa giá trị cực trị của b là số lần ít nhất (có thể bằng 0) cần thực hiện thao tác sau để mảng b trở thành không giảm:

  • Chọn một chỉ số i với 1i|b| (trong đó |b| là độ dài hiện tại của b).
  • Thay phần tử bi bằng hai số nguyên dương xy thỏa mãn x+y=bi.

Sau mỗi thao tác, mảng b dài thêm một phần tử và thao tác tiếp theo được thực hiện trên mảng vừa thay đổi. Có thể chứng minh mọi mảng số nguyên dương đều có thể biến thành không giảm bằng cách này.

Ví dụ, nếu b=[2,4,3] và chọn chỉ số 2, thao tác có thể tạo ra [2,1,3,3], [2,2,2,3] hoặc [2,3,1,3]. Với mảng này, một thao tác là đủ: [2,4,3][2,2,2,3], nên giá trị cực trị của nó bằng 1.

Cho một mảng a gồm n số nguyên. Hãy tính tổng giá trị cực trị của tất cả các mảng con liên tiếp không rỗng của a, lấy dư cho 998244353. Nếu một mảng con xuất hiện nhiều lần trong a, giá trị cực trị của nó được tính đúng số lần xuất hiện.

Một mảng d là mảng con liên tiếp của c nếu d nhận được từ c bằng cách xóa một số (có thể là 0 hoặc tất cả) phần tử ở đầu và một số phần tử ở cuối.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1t10000) là số bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa số nguyên n (1n105).
    • Dòng thứ hai chứa n số nguyên a1,a2,,an (1ai105).

Tổng n trên tất cả các bộ dữ liệu không vượt quá 105.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra một số nguyên là tổng giá trị cực trị của tất cả các mảng con liên tiếp của a, lấy dư cho 998244353.

Ràng buộc

  • 1t10000
  • 1n105
  • 1ai105
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 105.

Ví dụ

Input Output Giải thích
4
3
5 4 3
4
3 2 1 4
1
69
8
7264 40515 28226 92776 35285 21709 75124 48163
5
9
0
117
Bộ 1: các mảng con là [5,4,3] cần 3 thao tác, [5,4] cần 1, [4,3] cần 1, còn [5], [4], [3] cần 0. Tổng =3+1+1=5. Bộ 3: chỉ có một phần tử nên đã không giảm, tổng =0.
2
2
4 3
3
1 2 3
1
0
Bộ 1: [4,3][1,3,3] cần 1 thao tác; [4], [3] cần 0. Bộ 2: mọi mảng con đều đã không giảm nên tổng =0.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0