贪心

先转化一下题意

首先如果一个人的家和办公室在河同一侧那么建桥的时候不用去考虑它,最终把答案加上即可

在河两侧的家和办公室互换不影响答案,那么可以把这个抽象到一个区间$[l,r]$,距离就是$|l-x|+|r-x|$

如果$k=1$时,直接取中位数即可

那么考虑$k=2$时,对于某一个人来说,它对答案的贡献就是$min(|l-x_1|+|r-x_1|,|l-x_2|+|r-x_2|)$,$x_1,x_2$为修建两个桥的位置

但是如何快速判断某一个人要走哪个桥,首先如果有一座桥在区间内,那么一定走那座桥,如果没有,那么就走离最近端点最近的那座桥,更本质地讲,就是找离区间中点最近的桥

那么可以根据区间中点将区间排序,然后枚举断点,将左右两端各视作$k=1$时的子问题

现在考虑如何维护一个集合的中位数

发现如果加入或删除某一个数,中位数最多移动$1$个数,那么只需要用set找出每一个当前在序列中的数的前驱后继即可

代码

最新文章

  1. Mono on CentOS 6.3 安装笔记
  2. 浅谈Virtual Machine Manager(SCVMM 2012) cluster 过载状态检测算法
  3. babel6 的 export default bug
  4. NSXMLParser解析xml格式
  5. 本地Yum
  6. iOS6的旋屏控制技巧
  7. IO 输入流操作
  8. ASP.NET 为GridView添加序号列,且支持分页连续累计显示
  9. 什么是json
  10. EF下CodeFirst、DBFirst与ModelFirst分析
  11. SIM卡
  12. JSON 日期格式带 T 问题
  13. MongoDb的副本集搭建教程(个人操作笔记)
  14. easyUI带复选框的组合树
  15. python模块之_pip_其它
  16. Android热修复原理
  17. JAVA首次课堂测试总结
  18. Code Signal_练习题_depositProfit
  19. javascript 获取当前部署项目路径
  20. UIScrollView之isTracking delaysContentTouches canCancelContentTouches

热门文章

  1. sublime text3配置Python2、Python3的编译环境
  2. #pragma comment 的使用方法
  3. MQTT消息队列压力测试
  4. HTTPS证书知识扫盲
  5. Linux最常用的命令大全
  6. day54 Pyhton 前端JS05
  7. day18 Pyhton学习 匿名函数
  8. iNeuOS工业互联平台,设备容器(物联网)改版,并且实现设备数据点的实时计算和预警。发布3.2版本
  9. 真的可以啊,用C语言实现面向对象编程O O P!C语言真的无所不能~
  10. lumen单元测试