数据结构学习笔记
CF482B Interesting Array
https://www.luogu.com.cn/problem/CF482B
两种做法
1.拆位后把=1的转换为区间赋值,=0的贪心的转换为区间询问check用差分和前缀和实现即可
2.把所有限制转换为区间或,然后再检查一遍所以限制是否满足,线段树维护即可
\[\\
\]
CF187D BRT Contract
https://www.luogu.com.cn/problem/CF187D
显然可以考虑维护0时刻从每个路口到达终点需要多久
这个玩意dp的话发现转移的时候需要找到最近的被红灯拦下的点
然后写一下式子的话发现就是
\[(s_k-s_i) \ \ mod \ \ mo>=g
\\
其中mo=g+r
\]
对于这种同余不等式
\(s_k\)的范围显然可以拆成两个区间的形式
因此我们只需要倒序dp
然后用线段树快速找出指定区间中编号最小的路口进行转移即可
对于每一次询问也是同理
也是快速找出第一次会在什么位置被拦下即可
\[\\
\]
与mex有关的数据结构问题
https://www.cnblogs.com/Creed-qwq/p/13884841.html
\[\\
\]
一道不知道哪里来的题
a[i]=s[i-1]--->s[i]=2*s[i-1]。
询问的时候,从右到左扫描。
在线段树上二分,去找等于s[i]/2的位置
如果找的位置与i相邻,显然合法。
否则,设找到的位置为\(k\),可以推出\(k~i\)中一定不存在合法解,证明显然。
又因为每次权值范围都会/2,最多只会进行\(logvalue\)次操作。
修改的时候用线段树维护区间加法即可。
时间复杂度\(O(n*logn*logvalue)\)
根号相关的数据结构问题
分块
莫队
其它