标签:10 cos le limits 线段 笔记 学习 sum sin
1. 复杂信息维护
- 题意:
给定序列 \(a_1,a_2,...,a_n\),支持两种操作:
- 给 \(l \le x \le r\) 的所有 \(a_x\) 加上 \(k\)。
- 查询 \(\sum\limits_{i=l}^{r}sin(a_i)\)。
\(n,m\le 10^5\)
- 做法:
维护 \(\sin\) 和还有 \(\cos\) 和就行。
理由是下面这俩柿子:
\[\begin{aligned}\sin(\alpha+\beta)=\sin\alpha\cos\beta+\cos\alpha\sin\beta\\\cos(\alpha+\beta)=\cos\alpha\cos\beta-\sin\alpha\sin\beta\end{aligned} \]所以:
\[\begin{aligned}\sum\limits_{k=l}^{r}\sin(a_k+c)=\sum\limits_{k=l}^{r}(\sin a_k\cos c+\sin c\cos a_k)=\cos c(\sum\limits_{k=l}^{r}\sin a_k)+\sin c(\sum\limits_{k=l}^{r}\cos a_k)\\ \sum\limits_{k=l}^{r}\cos(a_k+c)=\sum\limits_{k=l}^{r}(\cos c\cos a_k-\sin c\sin a_k)=\cos c(\sum\limits_{k=l}^{r}\cos a_k)-\sin c(\sum\limits_{k=l}^{r}\sin a_k)\end{aligned}\]- 题意:
给你一颗树的括号序列,求其直径。
然后 \(m\) 次询问,每次交换两个括号,求交换后的直径。
保证交换后的序列合法。
\(n,m\le 10^5\) - 题解
- 题意:
- 区间修改:\(a_i=a_i\times c,i\in[l,r]\)。
- 区间询问:\(\varphi(\prod\limits_{i=l}^{r}a_i)\mod (10^9+7)\)。
\(n\le 4\times 10^5,q\le 2\times 10^5\)
2. 需要脑洞的题目
- 题意:
将序列子段从小到大或从大到小排序,一共 \(m\) 次,最后查询位置 \(q\) 上的值。
\(n,m\le 10^5\) - 做法:
考虑 \(01\) 序列的排序如何实现。
我们发现 \(01\) 序列排序之后有一边是 \(0\),一边是 \(1\),所以给某个子段排序相当于两个区间覆盖操作,可以使用线段树维护
然后再考虑对于原数组 \(a_i\),二分 \(q\) 位置上的最终值 \(p\)。将 \(a_i<p\) 的 \(i\) 标记为 \(0\) ,否则标记为 \(1\)。对于这个 \(01\) 序列排序,最后如果位置 \(q\) 上面的数是 \(1\),就说明 \(p\) 一定比这个二分的值大。
嗝,咕咕咕
标签:10,cos,le,limits,线段,笔记,学习,sum,sin 来源: https://www.cnblogs.com/EnderLittleBlog/p/15755593.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。