首页 > 其他分享 >数据结构题解报告

数据结构题解报告

时间:2024-10-10 21:12:43浏览次数:1  
标签:frac 报告 题解 sum ra s2 区间 数据结构 s1

[GDOI2016] 疯狂动物城

对于大多树上区间问题往往加个树剖就能变成普通区间问题,只是说复杂度会加个 \(log\),出题人这么做的理由可能是想锻炼一下评测姬吧选手的码力吧。而强制在线只需要可持久化数据结构即可。

本题同理可视作区间问题用线段树维护,考虑推式子降次以便于维护

\(ans=\sum_{i=1}^n\sum_{j=1}^{i-1}a_ij=\sum_{i=1}^na_i\frac{(i-1)i}{2}\)

本题信息较多考虑套用双半群模型,则只需考虑信息之间的合并,标记与信息合并,标记之间的合并,由于本题得可持久化,并且原题卡空间,所以得标记永久化,则不需要考虑标记群之间的合并。

先考虑如何将两个区间信息中的答案(记为 \(ans\) )进行合并,显然对于靠左的区间贡献不变,可以考虑计算右边的区间贡献的变化量。

\[\begin{aligned} d&=\left[\sum_{i=l}^ra_i\frac{(i-1)i}{2}\right]-\left[\sum_{i=l}^{r}a_i\frac{(i-l)(i-l+1 )}{2}\right] \\ &=\sum_{i=l}^ra_i\frac{2il-2i-l^2+l}{2} \\ &=\frac{-l^2+l}{2}\sum_{i=l}^ra_i+(l-1)\sum_{i=l}^ra_ii \\ &=\frac{-l^2+l}{2}\sum_{i=l}^ra_i+(l-1)\left[(l-1)\sum_{i=l}^ra_i+ \sum_{i=l}^ra(i-l+1)\right] \\ &=\left[\frac{-l^2+l}{2}+(l-1)^2\right]\sum_{i=l}^ra_i+(l-1) \sum_{i=l}^ra(i-l+1) \end{aligned}\]

对于第一项显然只需要维护区间和即可(记为 \(s1\) ),对于第二项则需要维护每一位乘上区间位置的和(记为 \(s2\) )。这些东西在线段树上显然是好合并的。

\(s1\) 为左右区间 \(s1\) 之和。
\(s2\) 为左右区间 \(s2\) 之和再加上右区间的 \(s1\) 乘上左区间长度。

再考虑标记与信息的合并,本题只有简单的区间加操作,并且信息具有结合律,可以直接标记永久化所以只需要考虑 \(ans\),\(s1\) 和 \(s2\) 的变化就行了。记 \(t\) 为本层完全覆盖的区间加的值之和,\(len\) 为本次查询的区间在本层的长度。

简单推导得到

\(ans\) 应加上 \(t\sum_{i=1}^{len}\frac{(i-1)i}{2}\),可以预处理求和部分,也可以平方和。
\(s1\) 应加上 \(tlen\)
\(s2\) 应加上 \(t\frac{(len+1)len}{2}\)

虽然到这里线段树的讨论就结束了,但是由于不确定起点在哪边,上述东西正反都得做 ...

总结一下,线段树上信息需维护 \(ans,s1,s2\) 的正反情况(把 \(len\) 加入会更好写一点,不过空间常数会变大),标记只需维护 \(t\) 即可。

然后加上树剖、可持久化本题就结束了。

时空复杂度皆为 \(O(nlog^2n)\)。

优化可以考虑每个给每条链单独建一颗线段树,这样时空常数都会减小不少。

标签:frac,报告,题解,sum,ra,s2,区间,数据结构,s1
From: https://www.cnblogs.com/07Qyun/p/18456509

相关文章

  • 20222304 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1本周学习内容1)反汇编反汇编是指将计算机程序的机器代码转换回其相应的汇编代码的过程。在计算机编程和逆向工程领域中,反汇编是一种常见的技术,用于理解和分析二进制程序的功能和内部结构。通常情况下,程序员编写的源代码会被编译器转换成机器码,这是计算机可以直接......
  • 20222321 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    一.实验内容1实验目标本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想......
  • 20222411 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容1.1基础知识1.1.1NOP,JNE,JE,JMP,CMP汇编指令的机器码(1)NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)(2)JNE:条件转移指令,如果不相等则跳转。(机器码:75)(3)JE:条件转移指令,如果相等则跳转。(......
  • 【趣学C语言和数据结构100例】
    【趣学C语言和数据结构100例】问题描述输入两个正整数m和n,求其最大公约数和最小公倍数输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数求Sn=a+aa+aaa+…+a…a之值,其中a是一个数字,n表示a的位数,n、a由键盘输入。例如:2+22......
  • [AGC054D] (ox) 题解
    感觉看到交换就应该要想到逆序对。思路一个前置小知识,我们把一个排列用相邻交换复原的最小次数是逆序对数量。考虑没有ox的情况。我们顺着扫一遍字符串。把左括号正一,右括号看作负一,当前缀和小于零以后,我们把后面最近的左括号提过来,这样可以构造出交换次数最少的合法括号串......
  • 【专题】2024年中国电商市场研究报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37835在全球电商持续发展的背景下,中国电商市场面临新态势。增长压力与机遇并存,从综合电商与直播电商发展的放缓,到企业3C数码商用品电商采购的趋势,以及零售业拥抱“性价比时代”,中国电商正积极探索新路径。同时,社群电商爆品营销也为出海品牌带来......
  • 【学校训练记录】十月个人训练赛1题解
    A只需按照题目意思扩展h倍即可,先记录初始字符,打印时扩展为2*h根据题目公式打印`include<bits/stdc++.h>defineintlonglongusingnamespacestd;constintMAXN=100005;intn;inta[MAXN];charmp[105][105];signedmain(){inth,w;cin>>h>>w;for(inti=......
  • 高清图解28个高并发之数据结构/数据结构场景匹配技巧分析(高并发精通篇一)
    Java集合以ArrayList、LinkedList、HashSet、TreeSet和HashMap等组件为核心,构筑了强大而灵活的数据结构体系。这些组件精心设计以满足不同的性能和功能需求,如ArrayList的动态数组支持快速随机访问,而LinkedList的双向链表结构则擅长于频繁的插入和删除操作。HashSet基于......
  • 20222305 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    网络攻防实验报告姓名:田青学号:20222305实验日期:2024/09/29—2024/10/09实验名称:缓冲区溢出和shellcode指导教师:王志强1.实验内容本周学习内容总结:学习了系统安全(缓冲区溢出是重点)主要内容:漏洞简介:定义以及安全漏洞。BOF(缓冲区溢出):直接原因-没有严格的内存越界检查......
  • CF959F Mahmoud and Ehab and yet another xor task 题解
    题目传送门前置知识线性基解法将操作离线下来,并按\(\{l\}\)升序排序,接着顺序插入线性基并处理询问。对于未成功插入线性基的元素\(k\)一定能被线性基内选出若干元素得到。故在\(x\)能被表出的情况下,设\(1\siml\)中成功插入线性基的元素个数为\(siz\),对于剩下\(......