Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X,在序列的第Y个数之前插入一个数X: ②Add L R X,对序列中第L个数到第R个数,每个数都加上X: ③Query L R,询问序列中第L个数到第R个数的平方和. Solution 我不会告诉你这道题我打了10000+byte,并且改了2个月,50多个小时,删掉代码重打了5次.这道题用splay来…
前言 在上一节中,我们讲述了Splay的核心操作rotate与splay 本节我会教大家如何用这两个函数实现各种强大的功能 为了方便讲解,我们拿这道题做例题来慢慢分析 利用splay实现各种功能 首先,我们需要定义一些东西 各种指针 struct node { int v;//权值 int fa;//父亲节点 int ch[2];//0代表左儿子,1代表右儿子 int rec;//这个权值的节点出现的次数 int sum;//子节点的数量 }; int tot;//tot表示不算重复的有多少节点…
Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀. 比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 11 字符 m a d a m i m a d a m 现在,火星人定义了一个函数LCQ(x, y),表示:该字符串中第x个字符开始的字串,与该字符串中第y个字符开始的字串,两个字串的公共前缀的长度.比方说,LCQ(1, 7) = 5, LCQ(2, 10) = 1, LCQ(4,…