我们可以利用分治法求数组的和,即
sum(l,r)=sum(l,m)+sum(m+1,r);(m=(l+r)/2)
sum(l,r)=a[l](当l==r时),
我们也可以利用类似的方法来求数组的最大值,现在给定n个元素的数组,请利用上述类似的分治法求出最大值,并按样例格式输出每一步的结果
(即对于每一个(l,r)的子问题,输出:MAX(l,r)=最大值,数组下标从1开始使用。)
注意:
为了确保你的程序在每次解决(l,r)的子问题时,总是能做到先解决(l,m),再解决(m+1,r),请使用如下的所示类似的中间变量的方法:
int tmpa=sum(l,m);
int tmpb=sum(m+1,r);
sum(l,r)=tmpa+tmpb;
两行,第一行一个整数n,表示元素的个数;第二行n个整数。
每一步的计算结果,每占一行。
最后一行输出整个数组的最大值。
6 1 2 3 4 5 6
Max(1,1)=1 Max(2,2)=2 Max(1,2)=2 Max(3,3)=3 Max(1,3)=3 Max(4,4)=4 Max(5,5)=5 Max(4,5)=5 Max(6,6)=6 Max(4,6)=6 Max(1,6)=6 6
n<=3e4,a[i]<=1e6。
分治