今天咋是模拟赛
T1:
神秘
考虑判定,
(x1,y1)&(x2,y2)
使用二维前缀和在4个方向上判定即可。但是显然有点错
使用set维护连续颜色段
以y为下标开set,set里面从下往上放线段
考虑维护什么信息,全局不为长方形的矩形数量ans1和为长方形的矩形数量ans2
首先维护线段是容易的
考虑修改,我们加点或者删点,加点,考虑分讨
- 如果孤立,ans1++
- 如果和一条线段/两条相连,找出新的线段,如果上面没有线段或者是长度相同线段并且这条线段包含在长方形内,ans1++,否则ans2++
所以我们还要维护线段是否被包含在长方形里,em有点困难啊。
考虑删除 - 如果孤立,ans1--
- 如果这个点和一条线段相连
- 如果这条线段删完之后用上面的判定不是矩形了,那么ans2++,否则ans1++
- 如果和两条线段相连
- 对两条线段分别判定
所以这个东西难在判定。我们现在想要快速\(O(\log n)\)获取一个矩形下标内的线段长度是否都等于一个值并且是否都被包含在一个矩形里,这个是不是可以用数据结构维护啊。很难啊
- 对两条线段分别判定
考虑部分分,从第二档开始考虑。
或者继续从二维前缀和开始考虑,我们新加一个点。从这个点往左右二分找到最长线段,然后上下二分找到上下第一个空行在哪里,就可以知道这个矩形理想中的面积和实际面积。
考虑加入删点,很难判定啊。判定肯定得从
第一档分不简单啊。
考虑其它的判定吧
联通块能想到dfs
我的转化好像有问题,我们只要维护是否全都是矩形和有几个矩形即可。
是否全都是矩形可以使用面积来判定
所以我们现在要维护的是矩形的面积和和矩形个数,全局的面积显然好维护。
先维护后面那个
- 加点
- 如果孤立,ans++
- 能对答案产生影响有很多种
- 连接一条孤立线段 -
- 连接两条孤立线段
- 如果方向相同 -1
- 如果方向不同 -2
- 连接三条线段 -3
- 连接四条线段 -4
- 连接一个矩形 -1
- 连接两个矩形 -2 看上面有没有格子,有格子,二分左右端点,然后往上下二分,这种是假的,那怎么搞?
- 补齐最后一块拼图 +1 二维前缀和
诗人?
但还是继续,哥们,分总得拿吧
从dfs角度考虑
那么就建图吧!
我们连边,然后就有一点,显然不可做吧
我们还是维护联通块的集合,维护集合内的点的横坐标max和min还有大小,这样简单很多了
我们四方向merge即可吧,然后这样就60分了,讲一下实现细节
我们把每一个格子看作一个点,然后每次都看作是向四方向的格子merge,然后并查集就随便维护了
对于n非常大的情况其实一点也不慌,我们开个map
我们现在要处理的就是删除这个东西。对于比较小的情况,我们直接全部重构!
我记得好像有可以任意删边的并查集?这其实启示我们往这方面继续考虑
我们先放掉孤立点的事情,那么就变成了LCT加边和删边,然后是不是就做完了。这确定能过吗。完蛋了,这是个图
并查集吧,吐了。
我们好像发现个很重要的东西,也就是我们加入一个点答案直接加,后面
继承上面的做法
我们并查集维护的是连通性,那么我们继续考虑连通性,我们现在就是要求(x,y)所在的连通块是不是矩形,然后要支持加点和删点。
我们二分找到左右上下端点,然后还要维护每个0右边的第一个0,然后就是询问\(\forall getright(x,i)>r\)是否成立,这个维护是容易的,然后就做完了。
这个转化无论是主席树还是什么我都不太会,可以总结一下
我当时是怎么想的,就是询问一个矩形内是否全为1,这个比较困难,可能要用什么树套树维护。所以我们维护每个1最右边的1,然后这个维护起来就简单多了
维护mex我们要求的是区间第一个没有出现的数,非常困难,但是我们发现只要出现了就行,所以我们维护的是每种颜色最后出现的位置。
总结了和没总结一样,记住吧,
T2:
时间很紧了,直接暴力吧
哎呀,这个有点像wqs二分啊
感性一下,如果没有k的限制前面的的是好求的,我们时间前缀max暴力转移即可,然后不就做完了?
小挂10pts,下次要注意一下斜率了。
wqs还有一个很容易写挂。也就是我们可能斜率会有一段平的,导致我们可能二分不到当时的端点,所以我们在符合条件的时候要强制选K个,因为我们这个是平的,所以不会有问题。也就是选0多少的问题
T3:
先写这个暴力
然后学LGV,不写这里了