首页 > 其他分享 >浅谈WQS二分

浅谈WQS二分

时间:2023-09-07 22:45:26浏览次数:32  
标签:二分 浅谈 WQS 切点 ans 凸壳 单调

WQS二分学习笔记

目录

用途:

WQS二分通常用来解决形如强制选k个且收益最大/代价最小的题目。
就比如说:https://www.luogu.com.cn/problem/P5308
如果没有限制的话,代码会非常简单

思考方式:

使用限制:

首先要使用WQS二分要有限制:便是最终k与ans(k)构成的函数是一个凸壳。
至于想要证明某一题凸壳成立,三种方法:

  1. 设两到三个数i,j,k推式子。
  2. 感性理解。
  3. 暴力打表输出(加一维来表示k)。
    强烈推荐第三种。
    但在这里就不好说了,可以这么分析:
    假设我有一道题要找恰好k时的最大值。
    那你就只需要感性理解下去少于k次不优,取大于k次且ans(k+p)>ans(k)不存在就好了。
    后面这半句常采用反证法分析(不然的话可以通过交换什么的让答案更优)

算法思想:

竟然形成了凸壳,那么十有八九和这个图脱离不了干系。
这种凸壳有什么共同关系呢?
当横坐标x单调递增时,发现斜率也是单调递增或者单调递减的。既然单调,就可二分。

我们假设有了一个上凸壳,要找最大值。
假设我们有一个斜率为c的直线去切所有的(k,ans_k)这些点,若不考虑共线的情况,最终存在一个切点,使这条线除了切点不会与凸壳有其他交点。
我们就考虑这个特殊点,最终他肯定也会和y轴有个纵截距。
代入ans_k和k可以得到,这个纵截距b=ans_k-c*k。
这个东西拆开来看,我进行k次操作时,每一次操作都会使最终答案减少c。
然后就会有这样一个结论:切点上的ans_k为所有选取的价值都减少c后的全局最优解。
于是我们就可以在每一次二分斜率 c 后,直接求出当前每个白边边权减小 c 后任意选的最优解,同时记录最优解需要的选取的数量 x,再把价值加上 c⋅x 就得到了所需的数据。
那么很明显的是,当限制为k时,上文的x自然就是k。

标签:二分,浅谈,WQS,切点,ans,凸壳,单调
From: https://www.cnblogs.com/linghusama/p/17686285.html

相关文章

  • 二分查找
    //1intbinarySearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target){//找......
  • 整体二分学习笔记
    有一些题目需要用到二分,但多次询问直接二分,会导致TLE,那么就需要用到一个离线算法,将多个询问放在一起二分,这就是整体二分。条件能够用整体二分解决的题目需要满足以下性质:1.题目具有可二分性(即单调性);2.修改对判定答案的贡献相互独立,修改之间互不影响效果。3.修改如果对判定答......
  • 二分的边界问题
    二分法的适用场景1.有单调性的题目一定可以二分2.没有单调性也有可能二分由此可见,二分的核心并不是单调性。核心是:定义了某种性质,使得可以将整个数据集一分为二,左半边满足一种性质,右半边不满足;右半边满足另一种性质,左半边不满足。则二分可以寻找左区间的边界,也可以寻找右区......
  • 浅谈外贸独立站必须配置SSL证书的必要性
    在互联网+时代,外贸独立站已经成为了各行各业企业开拓海外市场的重要途径。而在网络安全问题日益凸显的当今,保护数据传输安全成为当今重要的议题。为了保护用户隐私和数据安全,配置SSL证书已经变得尤为重要。SSL证书,即安全套接层证书,通过加密和认证技术,实现了客户端和服务器之间的数......
  • golang锁浅谈
    在Go语言中,有以下几种常用的锁类型:互斥锁(Mutex)互斥锁是最常用的一种锁机制,用于保护共享资源在并发访问时的互斥操作。常见的用法如下:varmutexsync.Mutex​//通过Lock()和Unlock()方法保护共享资源的临界区mutex.Lock()//执行对共享资源的操作mutex.Unlock()对于syn......
  • Golang匿名函数浅谈
    Go匿名函数(闭包)在Go中,匿名函数(也称为闭包)可以捕获外部变量。Go的闭包是指一个函数值(函数变量)包含了对其外部作用域中变量的引用。匿名函数可以访问和修改其外部作用域中的变量。它可以捕获外部变量的值,并在函数体中使用这些变量。下面是一个示例,展示了如何在匿名函数中捕......
  • golang接口用法浅谈
    类型接口Go不是面向对象的语言,在go里通过不同的结构体实现同一组公共接口这种组合的形式实现多态,类似C++的类和虚函数定义类型接口(InterfaceDefinition):使用type关键字定义接口,指定接口的方法签名。方法签名由方法的名称、参数列表和返回值组成,但不包含方法体。接口......
  • 二分法demo
    1.python实现frommathimportfloorarr=[1,2,3,4,5,6,8,9,10,11]left=0right=len(arr)-1res=7while(left<=right):mid=floor((left+right)/2)if(arr[mid]<res):left=mid+1elif(arr[mid]>res):......
  • 浅谈幂等设计
    1幂等性一句话,幂等就是一个执行操作,无论执行多少次,产生的效果和返回的结果都是一样的。2为什么要实现幂等性?如今随着互联网技术快速发展,业务越来越复杂,系统的高并发和关键数据的场景越来越多。在分布式系统中,机器宕机和消息丢失也是需要重点关注的问题,其中的一个典型就是幂......
  • 浅谈Mysql读写分离的坑以及应对的方案 | 京东云技术团队
    一、主从架构为什么我们要进行读写分离?个人觉得还是业务发展到一定的规模,驱动技术架构的改革,读写分离可以减轻单台服务器的压力,将读请求和写请求分流到不同的服务器,分摊单台服务的负载,提高可用性,提高读请求的性能。上面这个图是一个基础的Mysql的主从架构,1主1备3从。这种架构是客户......