A101156.求区间最大值(填空题)

普及-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个长度为 nn 的整数数组 a1,a2,,ana_1,a_2,\dots,a_n。请你使用分治递归计算整个数组的最大值。

分治思想:把区间 [l,r][l,r] 拆成左右两半 [l,mid][l,mid][mid+1,r][mid+1,r],分别递归求最大值,再合并答案。

具体例子

  • a=[2,7,1,5]a=[2,7,1,5],可拆成 [2,7][2,7][1,5][1,5]:左半最大为 77,右半最大为 55,合并得到整体最大为 77
  • 若区间只有一个数(例如 [l,l][l,l]),该区间最大值就是这个数本身。

输入格式

第一行包含一个整数 nn
第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n

输出格式

输出一行一个整数,表示数组最大值。

输入输出样例

  • 输入#1

    5
    2 7 1 9 3

    输出#1

    9

说明/提示

数据范围

  • 1n2×1051\le n\le 2\times 10^5
  • 109ai109-10^9\le a_i\le 10^9

样例解释

数组为

a1=2, a2=7, a3=1, a4=9, a5=3.a_1=2,\ a_2=7,\ a_3=1,\ a_4=9,\ a_5=3.

我们要求区间 [1,5][1,5] 的最大值。

11 步:

mid=1+52=3,mid=\left\lfloor\frac{1+5}{2}\right\rfloor=3,

[1,5][1,5] 分成 [1,3][1,3][4,5][4,5]


计算左半区间 [1,3][1,3] 的最大值

对区间 [1,3][1,3],取

mid=1+32=2,mid=\left\lfloor\frac{1+3}{2}\right\rfloor=2,

拆成 [1,2][1,2][3,3][3,3]

  • 对区间 [1,2][1,2],取

    mid=1+22=1,mid=\left\lfloor\frac{1+2}{2}\right\rfloor=1,

    拆成 [1,1][1,1][2,2][2,2]

    • [1,1][1,1] 只有一个数,因此最大值为 a1=2a_1=2
    • [2,2][2,2] 只有一个数,因此最大值为 a2=7a_2=7
    • 合并得到

      max([1,2])=max(2,7)=7.\max([1,2])=\max(2,7)=7.

  • 对区间 [3,3][3,3],只有一个数,因此最大值为 a3=1a_3=1

合并得到

max([1,3])=max(max([1,2]),max([3,3]))=max(7,1)=7.\max([1,3])=\max(\max([1,2]),\max([3,3]))=\max(7,1)=7.


计算右半区间 [4,5][4,5] 的最大值

对区间 [4,5][4,5],取

mid=4+52=4,mid=\left\lfloor\frac{4+5}{2}\right\rfloor=4,

拆成 [4,4][4,4][5,5][5,5]

  • [4,4][4,4] 只有一个数,因此最大值为 a4=9a_4=9
  • [5,5][5,5] 只有一个数,因此最大值为 a5=3a_5=3

合并得到

max([4,5])=max(9,3)=9.\max([4,5])=\max(9,3)=9.


最后合并得到整个区间 [1,5][1,5] 的最大值

把左半与右半合并:

max([1,5])=max(max([1,3]),max([4,5]))=max(7,9)=9.\max([1,5])=\max(\max([1,3]),\max([4,5]))=\max(7,9)=9.

因此输出为 99

首页