数据结构学习笔记

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)\)

根号相关的数据结构问题

分块

莫队

其它

posted @ 2020-12-07 22:26  Creed-qwq  阅读(158)  评论(0编辑  收藏  举报