• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

MQi-88

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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;
}

posted on 2025-11-18 15:57  M_Qq  阅读(0)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3