7.11:二分&分治

解题三大步骤:
1.条件提取/需求分解
2.模块化处理
3.优化

二分:
1.单调性
2.有界性
3.高查询效率

upper_bound():第一个大于x的数的地址
lower_bound():第一个大于等于x的数的地址
lower_bound()|upper_bound()若找不到目标则返回数组的end
找小于等于为upper_bound()-1,找小于为lower_bound()-1
二分答案:
1.单调性–>可行性
2.范围已知
3.明确知道某一个答案是否可行
4.正向难以求得最佳答案,但容易判断某答案是否可行

浮点数判断是否相等:两数相减是否小于等于1e-8
判断是否是二分题:
1.最优化问题(最大值最小/最小值最大)
2.正向求解方便吗?逆向是否更方便?
3.高速判断答案是否可行
4.数据范围在1e5以内(nlogn)

分治需求:
1.能到真正细微时求解
2.分解问题后,可用相似的方法求解子问题
3.子问题之间相互独立(区分于dp)
常用类似递归的方式实现

思考:
1.何为边界?
2.如何分解?
3.如何合并?

求第K大/小值:只做一半的快速排序(只递归左右部分之一),O(n)

1.排序x坐标
2.排序y坐标
3.从中间二分,在2ans*2ans方格内枚举

5 个赞

To be, or not to be: that is the question: Whether ti’s nobler in the mind to sufferThe slings and arrows of outrag…

1 个赞

image