随笔分类 -  高效算法思想

摘要:偶尔来道奶牛题休闲一下。 $a \leq 1e9$,$b \leq 1e9$,$a*b$的大矩形中有$n \leq 25000$条竖栏杆$m \leq 25000$条横栏杆(a对n,b对m),这些栏杆是无限长的且互不重合。给竖栏杆的横坐标和横栏杆的纵坐标。现在这些栏杆把矩形隔成很多块,问移除最短多长 阅读全文
posted @ 2018-03-21 16:42 Blue233333 阅读(131) 评论(0) 推荐(0)
摘要:$n \leq 100000$的俩序列,数字范围$2^{28}$,问所有$a_i+b_j$的$n^2$个数字的异或和。 这种东西肯定是按位考虑嘛,从低位开始然后补上进位。比如说第一位俩串分别有$c$个$1$和$e$个$1$,$d$个$0$和$f$个$0$,然后这一位就是$c*f+e*d$个$1$,会 阅读全文
posted @ 2018-03-18 10:35 Blue233333 阅读(242) 评论(0) 推荐(0)
摘要:$n \leq 50000$的凸多边形,给一个三角剖分,$q \leq 100000$组询问每次问两点之间最短路。 凸多边形是个特殊的图,一般图找单源最短路已经有精美的算法了。然而多组询问呢? 其实关于路径统计、路径询问的问题,在树上常用的是点分治,每次能统计经过根节点的路径,然后再尽量把他分成较大 阅读全文
posted @ 2018-03-12 06:47 Blue233333 阅读(522) 评论(0) 推荐(0)
摘要:$n \leq 2e5,m \leq 2e5,q \leq 2e5$,$n,m$的图给固定的$s,t$,以及$q$个询问,每次问删掉某条边之后问$s$到$t$的最短路。 首先喷一波,出题人语文太差了,这么美的题目居然潦草两句带过背景,描述题目也毫无趣味,差评!(本题分类:语文) 方法一:把图载到一个 阅读全文
posted @ 2018-03-08 11:19 Blue233333 阅读(382) 评论(0) 推荐(0)
摘要:$n \leq 1e9$,$n*2$的网格里有$m_1+m_2 \leq 1e6$个障碍物,现有一坦克从$(0,1)$出发要到$(n+1,1/2)$,他每秒可以换行(纵坐标1变2或2变1)也可以发炮弹,然后会强制往前走一格(横坐标+1),一次炮弹打一个障碍,炮弹装载时间$t \leq n$,一开始炮 阅读全文
posted @ 2018-03-07 10:23 Blue233333 阅读(577) 评论(0) 推荐(0)
摘要:所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 所有的云在此时没有重叠的面积 阅读全文
posted @ 2018-03-05 20:04 Blue233333 阅读(316) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-02-23 18:13 Blue233333 阅读(3) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-02-17 19:26 Blue233333 阅读(3) 评论(0) 推荐(0)
摘要:n<=500,n*n的矩阵,m<=60000个询问每次问子矩阵第K小。 方法一:第K小什么的是可以二分的,那就整体二分套二维树状数组吧! 这里有一个细节优化,本来整体二分是logMax的嘛,可以先把数字排个序,就变成logn了。这是没优化的后果(话说3个log确实极卡) 方法二:分块,n*n个数字从 阅读全文
posted @ 2018-01-08 08:39 Blue233333 阅读(183) 评论(0) 推荐(0)
摘要:n<=50000个vector进行m<=50000次操作:1、一区间的vector插入一个数;2、查询一区间中的vector中的所有数的第k大。 方法一:普通线段树套权值线段树!…… 方法二:单个询问是可以二分的,那就整体二分吧。这次是用线段树维护,把所有数字反过来求第k小再反过来就是第k大,注意5 阅读全文
posted @ 2018-01-08 07:36 Blue233333 阅读(179) 评论(0) 推荐(0)
摘要:n<=10000个数有m<=10000个操作,1、询问一个区间的第k小的数;2、单点修改。 带修主席树。 整体二分。 整体二分的必要条件: 1 #include<string.h> 2 #include<stdlib.h> 3 #include<stdio.h> 4 //#include<asser 阅读全文
posted @ 2018-01-07 21:24 Blue233333 阅读(271) 评论(0) 推荐(0)
摘要:n<=100000个数有m<=5000个询问,每次问区间第k大。 方法一:主席树!…… 方法二:整体二分。 整体二分一次性计算半个值域对一个区间的询问的贡献,然后根据“这半边的贡献在某个询问中可不可以直接处理掉”把询问分两部分,并按“数字的值是否在这半边”把数字也分成两部分,这样把一个区间和值域都分 阅读全文
posted @ 2018-01-05 11:28 Blue233333 阅读(198) 评论(0) 推荐(0)
摘要:n<=40000个数,在线问m<=50000次区间众数,数字Ai<=1e9。 重要结论:$mode(a \cup b)\epsilon mode(a) \cup b$,显然。 用分块做,对区间[L,R]取众数,就先对他们跨过的块O(1)取答案--预处理A(i,j)表示块i到块j的众数即可,然后对两边 阅读全文
posted @ 2017-12-13 21:50 Blue233333 阅读(179) 评论(0) 推荐(0)
摘要:n<=100000个带权区间,m<=100000个询问,每次问覆盖某个点的所有区间的权值的前K小的和,强制在线。 差分一下就变主席树了嘛。。然而调了半天。。 (若是此题入门可以看下其他人的博客) 1 #include<stdio.h> 2 #include<string.h> 3 #include< 阅读全文
posted @ 2017-12-03 21:17 Blue233333 阅读(133) 评论(0) 推荐(0)
摘要:n<=10000的序列做m<=10000个操作:单点修改,查区间第k小。 所谓的主席树也就是一个值域线段树嘛。。不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能够支持数值操作的东西,那就选择值域线段树,线段树上每个区间[L,R]表示的是值在L~R的数的相关信息,比如这里的 阅读全文
posted @ 2017-11-29 16:18 Blue233333 阅读(148) 评论(0) 推荐(0)
摘要:n<=200000个平面上的点,问有多少对点(i,j)满足Xi<Xj,Yi<Yj,且不存在k使得Xi<Xk<Xj && Yi<Yk<Yj。保证Xi,Yi互不相同。 看起来像一个偏序问题,先按Xi排序然后分治来做,但是那坨长长的东西怎么搞呢?试了若干种方法,不会,看题解。 首先Y这一维是要满足的,所以 阅读全文
posted @ 2017-11-27 18:31 Blue233333 阅读(343) 评论(3) 推荐(0)
摘要:对w*w,w<=2000000的矩形,一开始全是0(或一开始全是s),n<=170000个操作,每次操作:矩阵内某点加上一个数,查某一个子矩阵的和,保证修改数<=160000,询问数<=10000。 这还是一个比较明显的三维偏序:时间维,以及x和y。由于现在时间维是一个Ti<Tj,而x和y是要查x1 阅读全文
posted @ 2017-11-24 13:43 Blue233333 阅读(170) 评论(0) 推荐(0)
摘要:n<=100000个人,每个人三个属性Ai,Bi,Ci,一个人i的等级为Ai>=Aj,Bi>=Bj,Ci>=Cj的人数,求每个等级有多少人。 裸的三维偏序。按照常规思路,一维排序,一维归并,一维利用单调性或用树状数组维护,这里选择后者。 先按Ai排序,然后在分治过程中,solve(l,mid),so 阅读全文
posted @ 2017-11-23 19:52 Blue233333 阅读(184) 评论(0) 推荐(0)
摘要:n<=100000天,一开始有s块钱,每天股票A价格ai,B价格bi,每天可以做的事情:卖出股票;按A:B=RTi的比例买入股票。问最后的最大收益。股票可以为浮点数,答案保留三位。 用脚指头想想就知道是:某一天全部买进来,某一天全部卖出去,没有说买一半卖一半的。 那就可以dp了,f(i)表示前i天最 阅读全文
posted @ 2017-11-22 21:28 Blue233333 阅读(173) 评论(0) 推荐(0)
摘要:n<=100000个山,每个山有高度,从一个山到另一个山代价为高度差,有A和B两人一起开车,A每次选前进方向的次近山,B选最近,保证山高度不同且如果代价相同的山低的代价算小,每次旅行先A走,然后B,然后AB轮流开车,旅行如果下一次找不到目的地或者下一次到目的地时总代价超过了指定的X,他们就会停下。现 阅读全文
posted @ 2017-11-03 07:05 Blue233333 阅读(189) 评论(0) 推荐(0)