题意
n个整数 a[ 1 ] ~ a[ n ] 可以进行 m 次操作,每次操作 可以对 或是
求m次操作后最大值与最小值差的最大值可能是多少
思路
进行m次操作肯定是对同一个数操作m次,如果操作分散是不能让要求的差最大的
先找到原数组的最大值和最小值,让后对数组每一个数分别操作m次找最大值就好,直接遍历就行
注意特判 n == 1的情况
代码
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
#pragma GCC optimize(3)
typedef long long ll;
#define INF 0x3f3f3f3f
const int mod = 1e9+7;
const int maxn = 1e5+5;
#define stop system("pause")
inline ll read(){
ll s = 0, w = 1; char ch = getchar();
while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }
while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
ll a[100005];
int main(){
ll n = read(), m = read();
ll mini = 1e18, maxi = -1e18;
for (int i = 1; i <= n; ++i) {
a[i] = read();
mini = min(mini, a[i]);
maxi = max(maxi, a[i]);
}
if (n == 1){
cout<<0<<endl;
return 0;
}
ll ans = 0;
for (int i = 1; i <= n; ++i) {
ans = max(ans, maxi - a[i] + m * i);
ans = max(ans, a[i] + m * i - mini);
}
cout<<ans<<endl;
return 0;
}

京公网安备 11010502036488号