LINK:差分与前缀和 这道题和loj的一个人的高三楼相似. 也略有不同 先考虑前缀和:设G(x)为原式的普通型生成函数 \(F(x)=1+x+x^2+...\) 那么其实求的是 \(G(x)*(F(x))^k\)的前n项.k很大 不能直接做多项式快速幂 想直接展开系数似乎也做不到. 利用Lucas定理 \(F(x)^k\equiv F(x)^{sp+r}\equiv F(x)^{sp}*F(x)^r (mod p)\) 后面的东西再次展开\((F(x)^p)^s*F(x)^r\) 忘了一件事情…
题意 给定一个长为\(n\)的序列\(a\),求出其\(k\)阶差分或前缀和.结果的每一项都需要对\(1004535809\)取模. 打表找规律 先看前缀和,设\(n=5\),\(k=4\),按照阶从小到大把\(a_1\)在每个位置出现的次数列出来: \[0阶:1,0,0,0,0\\ 1阶:1,2,3,4,5\\ 2阶:1,3,6,10,15\\ 3阶::1,4,10,20,35 \] 再把\(a_2\)的列出来可以发现就是\(a_1\)的表往后移了一位,所以第\(k\)阶前缀和第\(i\)位\…
[题意]给定一个[0,m-1]范围内的数字集合S,从中选择n个数字(可重复)构成序列.给定x,求序列所有数字乘积%m后为x的序列方案数%1004535809.1<=n<=10^9,3<=m<=8000,m为素数,1<=x<=m-1.(个人认为题意修改错误) [算法]NTT+生成函数+离散对数+快速幂 [题解]由Πai=x(%m),可得Σlog ai=log x(%(m-1)),其中log以m的原根g为底. 所以通过将集合S和x对m取离散对数,将乘积转化为和,从而方便生成…
题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作: 操作一:将a[L]-a[R]内的元素都加上P 操作二:将a[L]-a[R]内的元素都减去P   最后询问a[l]-a[r]内的元素之和?     请认真看题干及输入描述. 输入描述: 输入共M+3行:第一行两个数,n,M,意义如“题目描述”第二行n个数,描述数组.第3-M+2行,共M行,每行四个数,q,L,R,P,若q为1则表示执行操作2,否则为执行操作1第4行,两个正整数l,r…
正题 题目链接:https://www.luogu.com.cn/problem/P5488 题目大意 求一个长度为$n$的序列的$k$阶差分/前缀和. 解题思路 先考虑前缀和怎么做 搞出来生成函数就是 \((\sum_{i=0}^na_ix^i)*(\sum_{i=0}^{\infty}x^i)^k\) 然后根据常识我们知道$(\sum_{\infty}xi)k=\sum_{\infty}\binom{i+k-1}xi$,当然也可以理解为$xi$的系数就是每次会往后跳任意格(可以是$0$),然…
传送门 差分是真心人类智慧--完全不会 这么经典的式子肯定考虑莫比乌斯反演,不难得到\(b_k = \sum\limits_{i=1}^k \mu(i) \lfloor\frac{k}{i} \rfloor^n\) 直接做是\(O(n\sqrt{n})\)的不够优秀,但是我们需要求的是\(b_1\)到\(b_K\)而不是单独的一个\(b\),这是最重要的一个性质. 考虑每一个数\(p\)对\(b_1\)到\(b_k\)的贡献.因为\(\mu(p)\)不变,所以对于\(\forall k \in…
题目描述 蒟蒻Edt把这个问题交给了你 ---- 一个精通数据结构的大犇,由于是第一题,这个题没那么难.. edt 现在对于题目进行了如下的简化: 最开始的数组每个元素都是0 给出nnn,optoptopt,modmodmod,minminmin,maxmaxmax,modmodmod在int范围内 操作AAA,QQQ AAA: LLL,RRR,XXX 表示把[l,R][l,R][l,R]这个区间加上XXX (数组的从L到R的每个元素都加上X) QQQ: LLL,RRR 表示询问[L,R][L,…
题目链接: [TJOI2019]唱.跳.rap和篮球 直接求不好求,我们考虑容斥,求出至少有$i$个聚集区间的方案数$ans_{i}$,那么最终答案就是$\sum\limits_{i=0}^{n}(-1)^i\ ans_{i}$ 那么现在只需要考虑至少有$i$个聚集区间的方案数,我们枚举这$i$个区间的起始点位置,一共有$C_{n-3i}^{i}$种方案(可以看作是刚开始先将每个区间后三个位置去掉,从剩下$n-3i$个位置中选出$i$个区间起点,然后再在每个起点后面加上三个位置). 那么剩下的$…
思路等引自博客 https://blog.csdn.net/johnwayne0317/article/details/84928568 对数组a[7]: a[0]=1; = d[0] a[1]=1; = d[1]+d[0] a[2]=1; = d[2]+d[1]+d[0] a[3]=1; .................. a[4]=1; a[5]=1; a[6]=1; a[7]=1; =   d[7]+d[6]+d[5]+d[4]+d[3]+d[2]+d[1]+d[0] 如果要对a[0]~…
这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数据,根据转移系数建立矩阵,跑一遍矩阵快速幂,复杂度O(D3logn),不过要注意卡常数,因为是稀疏矩阵可以判掉无用状态. 对于m较小数据,m=0快速幂,m=1为Dn-A(n,D),m=2暴力讨论一下有没有出现>=1次的值,如果有,唯一出现>=1次的值是出现2次还是3次. 当然还是水平低啊不会正解.…
LINK:染色 算是比较常规的广义容斥. 算恰好k个 可以直接转成至少k个. 至少k个非常的好求 直接生成函数. 设\(g_k\)表示至少有k个颜色是满足的 那么有 \(g_k=C(m,k)\frac{n!}{(s!)^k}\frac{(m-k)^{n-sk}}{(n-sk)!}\) 设\(f_k\)表示恰好有k个颜色是满足的 那么有 \(f_k=\sum_{j=k}C(j,k)(-1)^{j-k}g_j\) 前者可以直接求 后者需要卷积一下. 坑点:模数不是998244353 是1004535…
题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\}\)中,我们的小朋友就会将其称作神犇的.并且他认为,一棵带点权的树的权值,是其所有顶点权值的总和. 给出一个整数\(m\),你能对于任意的\(s(1\leq s\leq m)\)计算出权值为\(s\)的神犇二叉树的个数吗? 我们只需要知道答案关于\(998244353\)取模后的值. \(n,m\…
前置知识: 一,导数 倒数其实就是函数的斜率函数 设D[f(x)]表示f(x)的导数,则满足 $$1,D[f(x)]=\lim\limits_{\delta x->\infty}\frac{f(x+\delta x)-f(x)}{\delta x}$$ $$2,f(x+\delta x)=f(x)+D[f(x)]\times \delta x$$ I,常用导数 一次函数$f(x)=ax+b$ $$D[f(x)]=a$$ 幂函数(多项式)$f(x)=x^{a}$ $$D[f(x)]=\lim\li…
题目传送门 题意: 给出一个n*m的矩形,然后有两个操作. 1操作,对一个给出的菱形,对菱形范围内的东西进行+1. 2操作,对一个上半菱形的区域,进行+1操作. 最后求矩形内各个数的异或和. 思路: 在矩形中,我们在四个角上进行++--,然后利用差分的性质,就解决了区间更新, 但是在这里,想破脑汁,也没想出怎么进行++--.因为矩形的差分是横着或者竖着的, 最后的求和非常容易,但是这里不一样.最后看了题解豁然大悟,原来差分还可以动态的来, 本行的差分数组使用完了,还可以把差分数组下传,继续在下一…
众所周知,tzc 在 2019 年(12 月 31 日)就第一次开始接触多项式相关算法,可到 2021 年(1 月 1 日)才开始写这篇 blog. 感觉自己开了个大坑( 多项式 多项式乘法 好吧这个应该是多项式各种运算中的基础了. 首先,在学习多项式乘法之前,你需要学会: 复数 我们定义虚数单位 \(i\) 为满足 \(x^2=-1\) 的 \(x\). 那么所有的复数都可以表示为 \(z=a+bi\) 的形式,其中 \(a,b\) 均为实数. 复数的加减直接对实部虚部相加减就行了. 复数的乘…
<题目链接> 题目大意: 有$ n(n<=1e5)$个城市和一个首都(0号城市),现在每个城市有一个人,总共有$ m (m<=1e5)$次航班,每个航班要么从首都起飞,要么飞到首都去.每个飞机当天飞当天到.且坐飞机这一天什么也不能干,只能等飞机.每个飞机有一个花费和起飞时间.现在要把所有人集中到首都$ k(k<=1e6) $天,然后让他们各自回家.求最小花费,如果不可能实现k天或者不能回家了.或者去不了首都等等都输出-1. 解题分析: 首先判断是否有至少长度为k的区间能够保证…
一:差分数组概念  一.差分数组的定义及用途 1.定义:对于已知有n个元素的数列d,建立记录它每项与前一项差值的差分数组f:显然,f[1]=d[1]-0=d[1];对于整数i∈[2,n],我们让f[i]=d[i]-d[i-1].//f[i]数组为差分数组,d[i]数组为原数组 2.简单性质:(1)计算数列各项的值:观察d[2]=f[1]+f[2]=d[1]+d[2]-d[1]=d[2]可知,d[i]=f[i]的前缀和.(2)计算数列每一项的前缀和:第i项的前缀和即为数列前i项的和,那么推导可知…
链接:https://www.nowcoder.com/acm/contest/135/I来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作: 操作一:将a[L]-a[R]内的元素都加上P 操作二:将a[L]-a[R]内的元素都减去P     最后询问a[l]-a[r]内的元素之…
参考链接:https://blog.csdn.net/hzk_cpp/article/details/80407014 题目链接:https://www.acwing.com/problem/content/102/ 前缀和: 就是一个数组,要快速静态查询区间和,我们只要处理一个数组时A[i]=a[1]+a[2]+...+a[i]. A[1]=a[1] A[2]=a[1]+a[2] A[3]=a[1]+a[2]+a[3] A[4]=a[1]+a[2]+a[3]+a[4] ...... 例如:求[…
https://oj.gxu.edu.cn/contest/7/problem/D 描述 有一个所有元素皆为0的数组A,有两种操作: 1 l r x表示将A区间[l,r]内所有数加上x: 2 l r表示将A区间[l,r]内从左往右数第i个数加上i: 给出m个操作,请输出操作结束后A中的最大值. 输入 第一行一个整数m,表示操作的个数 接下来有m行,表示操作的内容,具体格式与题目中一致 0<=m<=10^6 1<=l<=r<=10^6 0<=x<=10^9 输出 输…
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1362 首先,\( f[i][j] \) 是一个 \( i \) 次多项式: 如果考虑差分,用一个列向量维护 0 次差分到 \( n \) 次差分即可,在第 \( n \) 次上差分数组已经是一个常数: 最后一行再维护一个 0 次差分的前缀和,0 次差分其实就是答案: 为了预处理 0 位置上的各次差分值,一开始先 n^2 求出 \( f[0][0] \) 到 \( f[n][n…
题目链接 郑重宣布我以后真的再也不会信样例了,三种写法都能过 另:谁评的蓝题难度qwq 蓝题有这么恐怖吗 两次差分,第一次差分,前缀和求出增量数组,第二次求出原数组顺便更新答案 看题解之后……第二次差分写跪,我脑子怕不是炸了 #include<cstdio> #include<cctype> #include<cstring> #include<cstdlib> #include<algorithm> #define maxn 10000020…
题意 https://vjudge.net/problem/CodeForces-460C 一个长度为 n 的序列 a ,你有 m 次操作的机会,每次操作是将其中连续的 w 个元素增加 1 .最大化最终序列的最小值. 思路 最大化最小值,二分的套路题. 数据范围1e5,所以我们要O(n)check. 如何能做到O(n)? 差分! 求出查分数组后,差分的前缀和就是原数组,如果我们要check(x),那么每当前缀和<x时,就要c[i]+=(x-s),c[i+w]-=(x-s),因为可以连续给w个元素…
大意: 给定n*m初始字符矩阵, 有k个新矩阵, 第$i$个矩阵是由初始矩阵区间赋值得到的, 求选择一个新矩阵, 使得其余新矩阵到它距离和最小. 字符集比较小, 可以考虑每次区间覆盖对每个字符的贡献. 区间覆盖转化为差分, 然后前缀和优化. 刚开始辅助数组开多了, 卡内存卡了好久. 看别人代码似乎可以再优化掉两个辅助数组. #include <iostream> #include <sstream> #include <algorithm> #include <c…
Intro: 作为查询界的\(O(1)\)王者--前缀和的亲兄弟,差分,他可是修改界的\(O(1)\)王者 Prerequisite knowledge: 前缀和 Function: 仅单次询问的区间修改 模板题:洛谷P2367 语文成绩 先想一想朴素算法怎么做吧 对于输入的每一组\((x,y)\),遍历序列\(a_{x..y}\),每一项加上\(z\),代码如下 while(p--)for(int i(x);i<=y;++i)a[i]+=z; Time complexity: \(O(np)\…
一维 #include<bits/stdc++.h> using namespace std ; ; int n,m; int a[N],b[N]; //a为前缀和,b为差分 差分和前缀和互为逆运算 void insert(int l,int r,int c) { b[l]+=c; b[r+]-=c; } int main() { cin>>n>>m; ; i<=n; i++) cin>>a[i]; ; i<=n; i++) insert(i,i…
Codeforces Round #688 (Div. 2) 题目:B. Suffix Operations 题意:给定一个长为n的数组a,你可以进行两种操作:1).后缀+1;     2)后缀-1:  问需要最少多少步操作你才能使得数组中元素全部相等,并且首先你可以改变其中任何一个元素成为任何一个数,并且不被计入步数 思路: 首先来看一下数组中大致分为这三种情况:举例 3 5 7   (上升式)这样中间的5变成3-7之间的任何一个数都能最终变成3 7 5 3 (下降式)与上述相同 7 3 5…
  Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 9701   Accepted: 2661 Description After their royal wedding, Jiajia and Wind hid away in XX Village, to enjoy their ordinary happy life. People in XX Village lived in beautiful huts. Ther…
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题. 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定,租借者对教室的大小.地点没有要求…
暴力移步 http://www.cnblogs.com/TheRoadToTheGold/p/6673430.html 首先解决本题应用的知识点: dfs序——将求子树的信息(树形)转化为求一段连续区间信息(线形) 线段树——求区间信息 树上差分——统计答案 lca——拆分路径 树链剖分——求lca 另deep[]表示节点的深度,watch[]表示观察者的出现时间,s表示玩家起点,t表示终点 固定节点的观察者出现的时间固定,说明对这个观察者有贡献的点是有限且固定的 只有满足  观察者出现时间=玩…