Description

给出两个长度为n的数列a和b,你要做k次匹配,每次选择匹配的a[i],b[j]必须满足i<=j
且每个a和b只能被匹配一次。匹配一次的代价为a[i]+b[j],求最小代价。
k<=n<=1.5*1e5

Solution

非题解法,作比赛时灵稽一动的产物,复杂度多一个log似乎能卡过去(原谅我数大)
当你在想部分分的Dp时,你会不会觉得这个k非常的烦人?
无论你怎么设状态,你都无法逃过k这一维,当然费用流也要跑k次。
如果我们设F[i]表示当做i次匹配时的最小代价,可以发现F是个凸函数,也就是斜率不断增大(或不减)
那么我们可以通过二分一个斜率c,然后把整个函数图像转一下,求最低点的答案。
如果最低点就是k的话那么我们就求出了F[k]!
这个听栋栋讲似乎叫做凸优化,是一个应用很广的算法
这个东西对应到题目里就相当于你每次做一次匹配,就把代价加个c
最后求没有限制的最小代价,这个可以用一个贪心来求
为了防止整数二分出现一些很猎奇的情况,我们可以对每次最优解加上一个特殊限制,比如匹配次数最小之类的。。。。
然后就可以卡卡常。。。反正我写了辣鸡STL的辣鸡set被卡成暴力分QwQ

Code

#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int N=1.5*1e5+5,M=405,inf=2*1e9;
struct note{int v,bz;friend bool operator < (note x,note y) {return x.v<y.v;}
}d[N];
set<note> A;
ll ans,f[2][M][M];
int n,K,sz,a[N],b[N];
int read() {char ch;for(ch=getchar();ch<'0'||ch>'9';ch=getchar());int x=ch-'0';for(ch=getchar();ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x;
}
void up(int x) {while (x&&d[x/2].v>d[x].v) swap(d[x/2],d[x]),x/=2;
}
void down(int x) {while(x*2<=sz) {  x=x*2;  if(x+1<=sz&&d[x+1].v<d[x].v) x++;  if (d[x/2].v>d[x].v) swap(d[x/2],d[x]);  else break; }
}
int calc(int mid) {int tot=0;ans=sz=0;fo(i,1,n) {note x;x.v=a[i];x.bz=1;d[++sz]=x;up(sz);note top=d[1];//A.insert(x);//note top=*A.begin();ll now=(ll)top.v+(ll)b[i]+(ll)mid;if (now<0) {tot+=top.bz;//A.erase(A.begin());x.v=-now+top.v;x.bz=0;//A.insert(x);d[1]=x;down(1);} else now=0;ans+=now;}fo(i,1,sz) d[i].v=d[i].bz=0;return tot;
}
int main() {freopen("orz.in","r",stdin);freopen("orz.out","w",stdout);n=read();K=read();int val=0;bool ok=1;fo(i,1,n) {a[i]=read();if (!val) val=a[i];else if (val!=a[i]) ok=0;}fo(i,1,n) b[i]=read();if (ok) {sort(b+1,b+n+1);ll ans=(ll)val*K;fo(i,1,K) ans+=b[i];printf("%lld\n",ans);return 0;}int l=-inf,r=0,mid;while (l<r) {mid=(l+r)/2;int cnt=calc(mid);if (cnt==K) break;if (cnt<K) r=mid;else l=mid;}printf("%lld\n",ans-(ll)K*mid);
}

[CF802N][jzoj5378]闷声刷大题相关推荐

  1. C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套

    文章只能发选择题,刷大题去刷题软件效果会更好 刷题软件 gongzhonghao:露露IT 选择题 1.下面选项中不是关系数据库基本特征的是_______. A. 不同的列应有不同的列名 B. 不同的 ...

  2. 闷声大发财的暴富逻辑【转】

    闷声大发财的暴富逻辑 原创 刘备教授 刘备教授 昨天 我本科毕业的时候外企待遇特别好,是国内企业的3-4倍,工作一年能买半套北京上海房子(当时房价才几千).外企不光指IBM.微软.宝洁这种高大上的,也 ...

  3. 年终奖8个月起,你肯定不知道蚂蚁金服有个闷声发大财的部门

    蚂蚁金服有个闷声发大财的神秘部门:月薪30K是超级白菜价,年终奖8个月起,上班时间普遍为1085,从去年年至今仍在扩招.同是进大厂享受福报,蚂蚁区块链部门的性价比真的非常高! 据知乎大V@半佛仙人透露 ...

  4. 写给前端的算法进阶指南,我是如何两个月零基础刷200题 等推荐

    大家好,我是若川. 话不多说,这一次花了几小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,一起共同进步. 前端从进阶到入院 作者ssh就职于字节跳动基 ...

  5. ble 连接成功后找不到服务_闷声发大财的BLE芯片龙头

    来源:内容由半导体行业观察(ID:icbank)原创,作者:邱丽婷,谢谢. 你有多久没使用过蓝牙功能了?随着Wi-Fi和快传软件的普及,蓝牙(Bluethooth)这一每部手机都配备的数据传输工具,正 ...

  6. 有哪些闷声发大财的行业?

    闷声发大财的人,不会轻易告诉别人自己发财了,将自己发财的方法透露出来后,分一份羹给别人,这样的傻子确实有,但特别少. 有些人看似普普通通,没有高学历,人也不够聪明,但就是能够找到挣钱的方法.平时一块聊 ...

  7. C语言入门必刷100题合集之每日一题(1-20)

    一.用C语言实现华氏温度转换为以摄氏法表示的温度. 解题思路:这个问题的算法很简单,关键在于找到二者之间的转化公式,摄氏度等于九分之五乘以华氏度减去32的积,也就是: centigrade=(5.0/ ...

  8. 新手如何有效的刷算法题(LeetCode)

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 来源:五分钟学算法 前言 作为一名非科班出身的程序员,我是参加工作之后才开始接触算法,学 ...

  9. 【软考三】软设下午题第一大题--数据流图(做题)

    软设下午第一大题 一.数据流图(Data Flow Diagram,简称DFD) 1.基本图形元素元素 (1)外部实体(External Agent) (2)数据存储(Data Store) (3)数 ...

最新文章

  1. matlab“机器学习和深度学习”系列工具箱作用总结
  2. OPENCV打开图片进行边缘检测
  3. 第二阶段scrum-3
  4. python怎么创建虚拟环境_anaconda怎么创建python虚拟环境
  5. 【转】类与类之间的常见关系,uml图表示
  6. 在Rayeager px2上搭建web服务器anmpp
  7. 微信小程序傻瓜制作_傻瓜式教程:做一个带优惠券的微信小程序
  8. SylixOS USB Gadget层介绍
  9. linux raid5 nas,free nas 创建软raid5 来做iscsi服务 1
  10. 一次性通过CISSP考试之旅
  11. 编程不是一种知识,而是一门手艺。
  12. VUE Cascader省市二级联动 二级联动数据
  13. 小运营征战大市场,手游运营也需”千人千面” ——DT时代手游精细化运营解析
  14. Python|美国婴儿姓名分析
  15. 浏览器页面前端自适应方案
  16. 个人经历:谈一谈的程序员求职途径
  17. 自媒体-短视频搬运的那点事
  18. Excel如何对单元格内的分隔数据进行求和操作?
  19. 头哥 (Educoder)数据结构与算法实验:实验11 TYJ动态规划
  20. kepler克卜勒_克卜勒(Kepler)

热门文章

  1. 金税盘服务器地址修改,请问下东莞市金税盘的安全服务器地址是多少
  2. Codeforces Educational Codeforces Round 56 (Rated for Div. 2) 1093F. Vasya and Array
  3. spring5源码阅读(五)Post Processors类型及作用详解
  4. VMware(1):MacOS虚拟机无法设置自动调整大小(已解决)
  5. Axhub Charts学习记录贴-渐变色
  6. ApexCharts 柱状图上显示具体数值
  7. [蓝桥杯][2018年第九届真题] 递增三元组、螺旋折线、日志统计、全球变暖、乘积最大
  8. SWOT分析、PEST分析、GE矩阵、波士屯矩阵等分析方法
  9. 可试用M1芯片的排版神器Affinity Publisher,让你的排版工作既高效又美观
  10. Unity3D引擎之渲染技术系列三