万卷网 > 题目详情
题型:组合题

(最大值之和)给定整数序列a0,… an-1,求该序列所有非空连续子序列的最大值之和。上述参数满足1≤n≤105和1≤a;≤108。

一个序列的非空连续子序列可以用两个下标l和r(其中0≤l≤r<n)表示,对应的序列为alal+1… ar。两个非空连续子序列不同,当且仅当下标不同。

例如,当原序列为[1,2,1,2]时,要计算子序列[1]、[2]、[1]、[2]、[1,2]、[2,1]、[1,2]、[1,2,1]、[2,1,2]、[1,2,1,2]的最大值之和,答案为18。注意[1,1]和[22]虽然是原序列的子序列,但不是连续子序列,所以不应该被计算。另外,注意其中有一些值相同的子序列,但由于他们在原序列中的下标不同,属于不同的非空连续子序列,所以会被分别计算。解决该问题有许多算法,以下程序使用分治算法,时间复杂度0(nlogn)。

试补全程序。

(1).

②处应填()

A.

a[j]< max

B.

a[j]<a[i]

C.

pre[j-mid]<max

D.

pre[j- mid]> max

(2).

①处应填()

A.

pre[i]= std::max(pre[i- 1],a[i-1])

B.

pre[i+1]= std:max(pre[i],pre[i+1])

C.

pre[i]= std;:max(pre[i-1],a[i])

D.

pre[i]= std:max(pre[i], pre[i- 1])

(3).

④处应填()

A.

(long long)(r-j)*max

B.

(long long)(r-j)*(mid -i)*max

C.

sum[r- mid]- sum[-mid]

D.

(sum[r-mid]- sum[j-mid])*(mid-i)

(4).

③处应填()

A.

(long long)(j -mid)* max

B.

(long long)(j- mid)*(i-1)*max

C.

sum[j- mid]

D.

sum[j-mid]*(i-1)

(5).

⑤处应填()

A.

solve(0,n)

B.

solve(0, n-1)

C.

solve(1,n)

D.

solve(1, n-1)

更新时间:2023-09-18 19:07:32 |
【知识点】 CCF非专业级别软件能力认证CSP-S/提高级

相似题推荐

简答题

T4员工招聘

2026-04-17
简答题

T1社团招新

2026-04-17
简答题

T2道路修复

2026-04-17
简答题

T3谐音替换

2026-04-16
单选题

对一个大小为16(下标0-15)的数组构建满线段树,查询区间[3,11]时,最少需要访问多少个树结点(包括路径上的父结点和完全包含在查询区间内的结点)?

A.

7

B.

8

C.

9

D.

10

2025-10-17
公众号
客服 反馈
顶部