链接 表达式类似于斐波那契 但是多了一个变量 不能用快速幂来解 不过可以用线段树进行维护 对于每一个点够一个2*2的矩阵 1 a[i] 1  0   这个矩阵应该不陌生 类似于构造斐波那契的那个数列 还是比较容易能想到的 然后就用线段树进行维护 注意矩阵不满足交换律 在乘的时候要倒序. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<…
原题:ZOJ 3772 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3772 这题算是长见识了,还从没坐过矩阵+线段树的题目呢,不要以为矩阵就一定配合快速幂来解递推式的哦. 由F(x)=F(x-1)+F(x-2)*A[x],转化为矩阵乘法:  ===> 所以维护一颗线段树,线段树的每个结点保存一个矩阵,叶子节点为: a[0][0] = a[1][0] = 1, a[0][1] = Ax, a[1][1] = 0的形式…
题目链接:http://codeforces.com/problemset/problem/316/E3 题意:一个数列A三种操作:(1)1 x y将x位置的数字修改为y:(2)2 x y求[x,y]区间的数字的和,和函数为如下:(3)3 x y z将[x,y]区间的数字统一加z. 思路:很明显,这是一个线段树的题目.其中第一种和第三种操作都很容易搞定,第一种直接更新到底:第三种增加标记.显然为了求和,我们必须要在节点上增加一个和,表示以这个节点为根的子树的数字的和函数,这里我们用a来表示.那么…
题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{7,8,16},插入后为{16, -1, -1, -1, -1, -1, -1, 7, 8}.(即,依次插入7,8,16.而插入16时发现7已经被占,所以依次考虑(h(x)+1)%n ,因此16放在0的位置上.)这是正向插入,问题是给一个最终序列,问插入序列. 通过对hash表的观察可以得到: 一个…
题意 求区间l~r的a[l]%a[l+1]%--%a[r]的值 思路 因为取模的变化是很快的,所以线段树查找区间内第一个小于等于a[l]的数的位置,更新ans后继续查找即可. 注意查询满足某种条件的位置要这样写: int query(int L,int R,int l,int r,int rt,int x) { if(mi[rt]>x) return inf; if(l>R||r<L) return inf; if(l==r) return l; int m=(l+r)>>1…
思路来源:http://blog.csdn.net/u013654696/article/details/23037407#comments [做浙大校赛的时候没有看这道题,事后做的.思路不是自己的,但代码是自己敲的,由于伦家不懂如何用TeX敲出如此优美的公式,所以具体请看上面的博客链接(づ ̄3 ̄)づ╭.虽然说思路对应下的代码很好敲,但如果在比赛中我肯定不一定想得到这么做.在这道题中,线段树的节点与区间存的不是具体的值,是对应的一个矩阵.做了这道题也让我明白了线段树原来还可以那么好用吖(づ ̄3 ̄…
Calculate the Function Problem's Link:   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3772 Mean: 略 analyse: 简单的线段树维护矩阵. 矩阵乘法的结合律(a * b * c == a * (b * c)),注意矩阵乘法不满足分配率(a *b != b * a). 令 M[x] = [1 A[x]]              [1     0 ] ,那么有 [ F…
题目大意 给定一个序列A1 A2 .. AN 和M个查询 每个查询含有两个数 Li 和Ri. 查询定义了一个函数 Fi(x) 在区间 [Li, Ri] ∈ Z. Fi(Li) = ALi Fi(Li + 1) = A(Li + 1) 对于所有的x >= Li + 2, Fi(x) = Fi(x - 1) + Fi(x - 2) × Ax 求Fi(Ri) 题解 根据递推式可以构造一个矩阵: 继续展开,最终矩阵就是这个样子的了 因此每次查询就是求矩阵的连乘 普通的做法就是每查询一次线性计算一次上式,…
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5235 这种题目居然没想到,一开始往矩阵快速幂想去了,因为之前跪了太多矩阵快速幂,后来就..哎,擦.怎么没想到就是个线段树呢 因为1 A[x]  *     A[x-1]  这个是很容易推出的,比赛的时候看到这个就想那个快速幂去了,根本没往线段树上想,其实用线段树存储前面的矩阵,得到一个询问 1    0          A[x-2] L R,则访问 L+2 ,R的矩阵部分提…
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这个数组 因为矩阵的可加性,所以可以进行lazy操作 我最开始的想法是每个节点lazy表示该区间下标加了多少,add表示该区间已经加的下标对应的矩阵乘积,这样更新lazy是O(1)的,算add是O(logn)的 但是这样每次pushdown的时候,add下传总要多个log,会TLE 更好的办法是laz…