JZOJ 5922. sequence

5922. 【NOIP2018模拟10.23】sequence 
(File IO): input:sequence.in output:sequence.out

Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits  

Goto ProblemSet

Description

小 F 是一位 Hack 国的居民,他生活在一条长度为 n 的街道上,这个街道上总共有 n 个商店。每个商店里售卖着不同的 Hack 技能包,每个商店本身也会有个便利值。初始时,每个商店的便利值均为 0。每一天,街道上都会有一些商店优化改造。
具体来说,对于每一天,优化改造的商店都是一个连续的区间 l ∼ r,每次优化改造也会有一个优化参数 k。对于所有 l ≤ i ≤ r ,第 i 个商店的便利值会增加
aaarticlea/png;base64,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" alt=" " />。

小 F 想知道,m 天之后,每个商店的便利值分别是多少。由于小 F 并不喜欢高精度,因此你只需要输出便利值对 10^9 + 7 取模的结果。

 

Input

从文件sequence.in中读入数据。
第 1 行,两个整数 n, m 表示街道的长度与天数。
接下来的 m 行,每行三个整数 l, r, k,表示第 i 天优化改造的商店区间和优化参数。

Output

输出到文件sequence.out中,共 n 行。
每行 1 个整数,表示第 i 个商店的便利值对 109 + 7 取模的结果。
 

Sample Input

5 3
1 4 3
2 5 0
3 4 2 Sample 2
见选手目录下的sequence/sequence2.in与sequence/sequence2.ans。
该组样例的数据范围同第 1 个测试点。
 

Sample Output

1
5
12
24
1 第 1 次操作之后,每个商店的便利值分别为 1, 4, 10, 20, 0。
第 2 次操作之后,每个商店的便利值分别为 1, 5, 11, 21, 1。
第 3 次操作之后,每个商店的便利值分别为 1, 5, 12, 24, 1。
 
做法(摘自JZOJ):可以发现组合数有一个简单的性质,即 C(n k) = C(n−1 k) + C(n−1 k−1) ,我们可以从这 个式子中获得启发。考虑一个下标从 0 开始的数列,这个数列的每个数均为 1。 我们对这个数列做 k 阶前缀和。通过这个简单的式子,容易发现这个数列的第 i 项即为 C(k+i k ) 。于是我们可以得出一个这样的做法。 对于这个数列,维护这个数列的 k 阶差分。对于一次修改操作,我们只需要 在各阶差分数组上修改,最后做一遍 k 阶的前缀和即可。注意差分数组上修改 时,区间边界要相应地减掉一些值。时间复杂度 O(nk),期望得分 100pts。
 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define N 500010
#define rep(i,a,b) for(register int i=a;i<=b;++i)
#define dep(i,a,b) for(register int i=a;i>=b;--i)
using namespace std;
LL mo=1e9+;
int n,m;
LL f[][N],a[N],ans[N];
struct arr{
int l,r,k;
}e[N]; bool cmp(arr x,arr y){
return x.k>y.k;
} int read(){
int s=;
char ch=getchar();
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';s=s*+ch-'',ch=getchar());
return s;
} int main(){
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
n=read(),m=read();
a[]=;
rep(j,,)
rep(i,,n)
a[i]=(a[i]+a[i-])%mo,f[j][i]=a[i];
rep(i,,m) e[i].l=read(),e[i].r=read(),e[i].k=read();
sort(e+,e+m+,cmp);
int l=;
dep(i,e[].k,){
while(l<=m&&e[l].k==i) ++ans[e[l].l],++l;
rep(j,,l-)
ans[e[j].r+]=(ans[e[j].r+]-f[e[j].k-i][e[j].r-e[j].l+])%mo;
rep(j,,n)
ans[j]=(ans[j]+ans[j-]+mo)%mo;
}
rep(i,,n) printf("%lld\n",ans[i]);
}
上一篇:bestcoder#23 1002 Sequence II 树状数组+DP


下一篇:BestCoder #88(1001 1002)