CF1064Div2 C
贪心模拟即可
记录前后,删除前ans+max(vall,valr)并更新l
点击查看代码
void solve() {
int n;cin >> n;
set<pii>st;
map<int, int>mp;
vector<int>bef(n + 1), aft(n + 1);
for (int i = 1;i <= n;i++) {
bef[i] = (i == 1 ? n : i - 1);
aft[i] = (i == n ? 1 : i + 1);
int x;cin >> x;st.insert({ x,i });
mp[i] = x;
}
i64 ans = 0;
while (st.size() > 1) {
auto [x, i] = *st.begin();
int lr = min(mp[bef[i]], mp[aft[i]]);
ans += lr;
aft[bef[i]] = aft[i];
bef[aft[i]] = bef[i];
st.erase(st.begin());
}
cout << ans << endl;
}
浙公网安备 33010602011771号