题意:给你一个长为n的序列,给你一个mod,再给你q次询问,每次区间查询P(a) = a1·F1 + a2·F2 + ... + an·Fn F为对应的斐波那契数列,a1为以排好序且不重复的区间内的数
参考博客:
题解:首先对这道题目我们能够想到用莫队处理区间的查询,那么我们只要想办法把莫队的左右区间扩展和收缩解决就可以,那么怎么解决下一个出现的ai是第几大,以及比ai要大的数后移(或前移)的操作就需要用到线段树的维护,区间维护要移动的距离,正数表示向右,负数表示向左。
斐波那契的一个公式F[i-1]*F[k]+F[i]*F[k+1]=F[i+k],所以只要每次维护两个值,一个是第一行的值,一个是第二行的值,线段树维护要移动的距离,
(图是我盗的,盗自上面的博客)
#include #include #include #include #include