PMTD
设当前的最大值为
所以我们只可能进行这四个操作:
下面我们就来考虑那种操作对答案的贡献更大:
设一次操作对答案的贡献为
那么这四种操作的贡献分别为:
显然有
下面我们考虑如何选取
不难发现,当
并且当进行一次
所以我们只需要记录初始序列的最大值和最小值,如果最大值小于
下面是
#include<cstdio>
int n,val,mx,mn=1e9,m;
int main()
{
scanf("%d%d",&n,&m);
while(n--)
{
scanf("%d",&val);
if(val>mx)mx=val;
if(val<mn)mn=val;
}
if(mx<2)mx+=2,m--;
printf("%lld",((1ll*mx)<<m)-mn);
return 0;
}