题目:https://loj.ac/problem/2585 算答案的时候要二分! 这样的话,就是对于询问位置 x ,二分出一个最小的 mid 使得 [ x-mid , x+mid ] 里包含所有种类的商店. 判断一个区间里包含所有种类商店的方法是对于每种商店,记录每个这种商店的同类型前驱:然后看看 [ x+mid+1 , INF ] 里所有种类商店的前驱最小值是不是 < x+mid 就行了. 实现方法就是对于每个种类开一个 set 维护该种类商店的所有位置,再对所有种类开一个线段树维护这个区间…
#2585. 「APIO2018」新家 https://loj.ac/problem/2585 分析: 线段树+二分. 首先看怎样数颜色,正常的时候,离线扫一遍右端点,每次只记录最右边的点,然后查询左端点,这里不太行.这里只需要统计是否全出现过,pre[i]为这个颜色的上一个位置,那么这也就说明了pre[i]+1这段区间没出现过,所以要求[r+1,n]这段区间的最小的pre都要大于等于l.于是这就是线段树区间查询最小值了. 注意的是,每个点的pre有多个,每个叶子节点包含一个set,把所有的值插…
题解 成功把自己写自闭了 离散化之后再二分我是真不会算坐标啊我这个zz 先离散化所有坐标,然后对于每个位置维护一个最小前驱,然后线段树区间维护最小前驱 什么?位置一样?那就给每个大小为1的位置开个multiset,往上维护的时候就直接左右区间取min 然后就是,在线段树上二分了 我们把正无穷和负无穷位置加进去会比较好维护 如果\((x - m,x + m)\)这个区间不合法,转化为\([x + m,+\infty)\)有前驱在\((-\infty,x - m]\)内 也就意味着我们的距离大小至少…
\(\mathcal{Description}\)   Link.    \(n\) 个结点的图,\(m\) 条形如 \((u,v,l,r)\) 的边,表示一条连接 \(u\) 和 \(v\) 的无向边会在时间 \((l,r]\) 内存在,时间范围在 \([0,K]\).判断每个时刻的图是否是二分图.   \(n,K\le10^5\),\(m\le2\times10^5\). \(\mathcal{Solution}\)   线段树分治其实和线段树没啥关系.(   个人感觉线段树分治节约时间的方…
题目:https://loj.ac/problem/2586 只会 19 分的暴力. y 都相等,仍然按直径从大到小做.如果当前圆没有被删除,那么用线段树把 [ x-r , x+r ] 都打上它的标记. 看当前圆有没有被删除,只要看 x-r 和 x+r 两个位置上的标记就行了.因为被删除的话当前圆的直径更小,有相交的话, x-r 或 x+r 一定在对方内部.可以 x-r 和 x+r 分别在两个圆内部,看看哪个更大即可. #include<cstdio> #include<cstring&…
传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道题直接上权值线段树维护nnn行和第mmm列就行了. 原因? 这是因为每次修改只会影响到某一行和最后一列. 但直接跑是会炸空间的. 因此我们动态开点来操作一波就行了. 对于被删除的点我们存到vectorvectorvector里面就行. 代码: #include<bits/stdc++.h> usi…
写了一种比较容易理解 但是常数很大的sol. 容易发现可以扫描线. 维护好序列之后发现很难查距离 考虑二分. 这里二分可以在线段树上进行 当然可能存在一些问题 如果离散化的话需要处理一些比较麻烦的细节 如:需要向左二分一次向右二分一次什么的. 当然也可以直接在外面二分 得到一个区间 发现只要区间的本质不同的颜色满足 K种判定即可成功. 在线数颜色一般使用线段树+树状数组.不过这样做事log^3的. 考虑判定区间的另外一种方式 我们只需要所有颜色在这个区间中即可. 可以发现 如果总颜色不足k种 就…
「CQOI2006」简单题 线段树 水.区间修改,单点查询.用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可. #include <cstdio> #include <cmath> #define sl (x<<1) #define sr (x<<1|1) #define MAXN 100010 using namespace std; struct nod{ int…
「NOIP2010」关押罪犯(二分图染色+二分答案) 洛谷 P1525 描述:n个罪犯(1-N),两个罪犯之间的仇恨值为c,m对仇恨值,求怎么分配使得两件监狱的最大仇恨值最小. 思路:使最大xxx最小,描述就很二分.二分一个答案x后,对仇恨值大于x的罪犯之间构成的图进行二分图染色(相邻节点不染同一种颜色,总共两种颜色),染色成功则答案可行,复杂度\(O(nlogn)\). 二分图染色:把每个未标记的节点标记为任意一种颜色,对其进行一次 BFS,将该节点所在的连通分支全部染色,每一次扩展把未被染色…
[BZOJ4552]排序(线段树,二分答案) 题面 BZOJ 题解 好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成\(1\),其他的数字都设成\(0\) 最后检查一下这个位置是不是\(1\)就好啦 但是这样没法排序 那么,我们考虑二分一个答案, 把所有比\(mid\)大的数都设成\(1\) 这样,如果在第\(Q\)位上的数字是\(1\) 意味着有一个不小于当前\(mid\)的数在这个位置上 否则就是一个比\(mid\)小的数在这…