
双指针
逐梦起航-带梦飞翔
为了更加长远的快乐!
展开
-
two-pointer 双指针法—初步介绍
例题1:给出n个数,找出和最接近k的两个数。思路 :对数组进行排序,一个指针指向1(最小),另一个指向n(最大)。如果两指针之和大于k,则右指针左移1;如果两指针之和小于k,则左指针右移1。其中左移意为使值变大,右移意为使值变小,两两交换移动,就能最大可能的接近k。例题2:给出n个数,找出和最接近k的三个数。思路 :枚举1个数,其余与例题1一致。注意对于nums[st],nums[ed]和nums...原创 2018-03-22 15:43:22 · 1247 阅读 · 0 评论 -
poj3179 Corral the Cows(二分)(双指针)
题意约翰打算建一个围栏来圈养他的奶牛.作为最挑剔的兽类,奶牛们要求这个围栏必须是正方 形的,而且围栏里至少要有C< 500)个草场,来供应她们的午餐.约翰的土地上共有C<=N<=500)个草场,每个草场在一块1x1的方格内,而且这个方格的 坐标不会超过10000.有时候,会有多个草场在同一个方格内,那他们的坐标就会相同.告诉约翰,最小的围栏的边长是多少? 题解...原创 2018-08-03 12:32:23 · 862 阅读 · 0 评论 -
luogu3066 逃跑的Barn(双指针)(树上差分)
题意转换给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于k的点有多少个。 题解双指针+树上差分对于每个点,看看它的贡献能往上去到哪里,把其中的点权值全部加1。这是一个“我为人人”的操作,如果让每个节点自己往下找,操作会相当复杂。因为往下是分叉,往上是合并。容易想到用二分查找最大上限,再用树链剖分统计和。实际上,有更优的解法。我们用指针法求最大上限,树上差分计和。...原创 2018-09-09 14:47:11 · 299 阅读 · 0 评论 -
洛谷1099 & bzoj1999 树网的核(树的直径)(双指针)
题目洛谷1099 树网的核bzoj1999 树网的核(加强版)题解树的直径首先要发现一个结论:在任意一条树的直径上求最小偏心距是一样的!简单证明一下,自己yy吧~这样以后就可以乱搞了,O(N^3)暴力也可以过n=300的数据。直接上O(N)正正解!随便搞出一条直径来,这些点分别是a1,a2,…,at。在直径上一个点al,会有一个最大的ar,使得dist[ar]-dist[a...原创 2018-10-03 22:32:04 · 357 阅读 · 0 评论 -
洛谷4648 [IOI2007] pairs 动物对数(曼哈顿转切比雪夫)(扫描线+树状数组)(前缀和)
题目洛谷4648 [IOI2007] pairs 动物对数范围与提示一维:M 最大是 75000000二维:M 最大是 75000三维:M 最大是 75题解要分情况讨论啊!一维双指针随便搞,一个指头,没个头找个最大尾,计入答案。二维曼哈顿转切比雪夫+扫描线+树状数组很容易想到一个点能看到的点呈一个45°斜角的正方形,这太难处理了。转成切比雪夫距离就变成了...原创 2018-10-29 13:53:07 · 563 阅读 · 0 评论