标签:Little Machine leq cdq Time 区间 操作
-
\(\text{CF641E Little Artem and Time Machine}\)
- 算法:cdq分治
题目:
给你一个带时间戳的可重集,进行 \(n\) 次操作:
-
在 \(t\) 时刻插入一个 \(x\)。
-
在 \(t\) 时刻删除一个 \(x\)。
-
询问在 \(t\) 时刻有几个 \(x\)。
操作按照给的顺序进行。
操作形如 q t x
,q
表示操作的类型。
\(1\leq n\leq 10^5\),\(1\leq t,x\leq 10^9\)。
题解:
首先一个显然的三维偏序:操作顺序、时间戳、\(x\) 值。
然后第一维操作顺序本来就有序,所以不去动。
考虑 cdq 分治,左区间对右区间的影响。
假设 \(i\) 在左区间, \(j\) 在右区间,\(i\) 对 \(j\) 产生贡献当且仅当
\[t_{i}<t_{j},x_{i}=x_j \]那么对于 \(x\) 考虑维护一个桶即可。
记得离散化 \(x\)。
由于连树状数组的维护都不需要,所以必须通过归并排序的写法来代替 sort
,时间复杂度还是能保证 \(O(n\log n)\)。
标签:Little,Machine,leq,cdq,Time,区间,操作 来源: https://www.cnblogs.com/trsins/p/15777658.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。