对于位置i而言,f(i)由以下三个部分组成
left_maxright_max因此我们可以预处理出后缀和数组r[i]表示位置i右边的最大值
左边的最大值我们可以一边遍历一边处理,然后取上述三个部分的max即可
n=int(input())
w=list(map(int,input().split()))
r=[0]*(n+1)
for i in range(n-1,0,-1):
    r[i]=max(r[i+1],w[i])
lft=0
for i in range(n):
    print(max(lft,w[i]*2,r[i+1]),end=' ')
    lft=max(lft,w[i])
        小美拿到了一个数组。她定义f(i)为:将第i个元素翻倍后,数组的最大值。现在小美希望你求出f(1)到f(n)的值。你能帮帮她吗?
第一行输入一个正整数n,代表数组大小
第二行输入n个正整数ai,代表小红拿到的数组
1≤n≤2×105
1≤ai≤109
n个正整数,用空格隔开,代表f(1)到f(n)的值
输入
5
1 3 2 5 4
输出
5 6 5 10 8