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

说明/提示

数据范围

  • 1≤n≤2×1051\le n\le 2\times 10^5
  • −109≤ai≤109-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。

输入解题思路,AI测评打分。不知道怎么写?

首页