这是本蒟蒻的10分代码:
#include <bits/stdc++.h>
using namespace std;
... // (正确的)快读快写
int n, a, res;
multiset<int> s;
int main() {
read(n), read(a);
s.insert(a);
res = a;
for (int i = 2; i <= n; i++) {
read(a);
auto it = s.insert(a);
it--;
auto l = it;
it++, it++;
auto r = it;
if (l == s.begin()) res += abs(*r - a);
else if (r == s.end()) res += abs(a - *l);
else res += min(abs(*r - a), abs(a - *l));
}
write(res);
return 0;
}
这是后来的AC代码:
#include <bits/stdc++.h>
using namespace std;
... // (正确的)快读快写
int n, a, res;
multiset<int> s;
int main() {
s.insert(INT_MIN), s.insert(INT_MAX);
read(n), read(a);
s.insert(a);
res = a;
for (int i = 2; i <= n; i++) {
read(a);
auto it = s.insert(a);
it--;
auto l = it;
it++, it++;
auto r = it;
if (*l == INT_MIN) res += abs(a - *r);
else if (*r == INT_MAX) res += abs(a - *l);
else res += min(abs(a - *r), abs(a - *l));
}
write(res);
return 0;
}
不明白第一种为什么错,和第二种有什么区别,求julao解答。