分析: 数据范围表示:c特别的小(c<20) 我们可以考虑nlogn*c^2的算法。 线段树维护区间信息:f[i]表示在[l,r]这段区间中选择i个数相乘的和。 因此,我们可以将区间看成一个点,在PushUp的时候用背包的方式更新父节点。(仔细观察发现这是卷积) 剩下的就是一些优化了... 附上代码 ...
分类:
其他好文 时间:
2018-05-15 22:53:36
阅读次数:
184
"bzoj" "luogu" 题意 有一个长度为$n$ 的序列,有三个操作: $I \ \ a\ b\ c\ :$表示将$[a,b]$这一段区间的元素集体增加$c$; $R \ \ a\ b\ :$表示将$[a,b]$区间内所有元素变成相反数; $Q \ \ a\ b\ c\ :$表示询问$[a,b ...
分类:
其他好文 时间:
2018-04-02 13:45:44
阅读次数:
137
线段树+卷积 这个东西直接算不太好,但是合并两段结果却很方便,假设c[i]表示选i个数乘积的和,那么$a[i]=\sum_{j=0}^{i}{b[j]*c[i-j]}$ 线段树维护即可 #include<bits/stdc++.h> using namespace std; const int N ...
分类:
其他好文 时间:
2018-02-10 19:30:33
阅读次数:
165
题目描述 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c(c<=20)个数相乘的所有方案的和mod 19940417的值。 输入 第一行两个数 ...
分类:
其他好文 时间:
2017-10-22 11:04:00
阅读次数:
125
题目大意: 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。 思路: 显然需要用线段树维护一 ...
分类:
其他好文 时间:
2016-08-30 20:56:13
阅读次数:
194
题目大意:给定一个序列,给定一个长度为n的序列,维护三种操作:
区间加
区间变为相反数
求某个区间内任取c个不同的数乘积的所有方案之和对P的模
比如说a b c三个数中取两个 就是ab+ac+bc
这题显然是用线段树来维护下- -
我们用一个0~20的数组a来记录某个区间的信息,其中a[i]表示区间内取i个数的乘积之和
区间合并就是a[i]=Σb[j]*c[i-j] 这个很好理解...
分类:
其他好文 时间:
2015-02-28 18:42:53
阅读次数:
168