1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
void solve() {
int n, l, r;
cin >> n >> l >> r;
vl a(n);
rep(i, 0, n - 1) cin >> a[i];
ranges::sort(a);
vl pre(n);
vl suf(n + 1);
pre[0] = a[0];
suf[n - 1] = a[n - 1];
rep(i, 1, n - 1) pre[i] = pre[i - 1] + a[i];
frep(i, n - 2, 0) suf[i] = suf[i + 1] + a[i];
ll ans = 0;
// 枚举选择a[i]-p的数量
// 假设a[i]-p的数量为y,p-a[i]的数量为x
// 当y>=x时,p应该取l
// 当y<x时,p应该取r
rep(i, 0, n - 1) {
if (a[i] < l) ans += l - a[i], a[i] = l;
if (a[i] > r) ans += a[i] - r, a[i] = r;
}
for (int i = 0, j = n - 1; i < j; i++, j--) {
ans += a[j] - a[i];
}
cout << ans << endl;
return;
}
|