CF 407C Curious Array(差分序列)
来源:互联网 发布:家用加湿器知乎 编辑:程序博客网 时间:2024/06/04 18:09
题意:给出n个数,有m个操作,每个操作是将[L,R]之间的数加上C(j-L+k,k),L<=j<=R,最后输出这n个数的值。
思路:比赛的时候拿线段树写了写,最终好像还是不太对。。。后来看群里讨论说这是差分序列什么的,就去虔诚地学了下……弄懂以后这题就不难了。首先我们知道C(x+1,k)-C(x,k)=C(x,k-1),可以发现,每次做差后k就会减1。由差分序列的性质可以知道k阶以上的差分序列全为0,可以求出在L位置的前k阶差分序列,那么就可以推出下一个数的差分序列,然后再R+1的位置减去就行了。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<stack>#include<set>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int maxn=100000+1000;const int maxm=100+10;const int mod=1000000007;ll C[maxn][maxm],ans[maxn][maxm];int a[maxn];void init(){ C[0][0]=1; for(int i=1;i<maxn;++i) { C[i][0]=1; for(int j=1;j<=i&&j<maxm;++j) C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod; }}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); init(); int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&a[i]); int l,r,k; while(m--) { scanf("%d%d%d",&l,&r,&k); for(int i=0;i<=k;++i) ans[l][i]=(ans[l][i]+C[k][k-i])%mod; for(int i=0;i<=k;++i) ans[r+1][i]=(ans[r+1][i]-C[k+r-l+1][k-i])%mod; } for(int i=1;i<n;++i) for(int j=101;j>=1;--j) ans[i+1][j-1]=(ans[i+1][j-1]+ans[i][j]+ans[i][j-1])%mod; for(int i=1;i<=n;++i) printf("%I64d ",((ans[i][0]+a[i])%mod+mod)%mod); printf("\n"); return 0;}
0 0
- CF 407C Curious Array(差分序列)
- codeforces 407C Curious Array 数学
- 差分序列应用
- 【CF#241E】Flights 差分约束
- CF 350D 直线映射 + 差分
- 序列长度 差分约束
- 差分序列和斯特灵数
- 【差分约束系统】序列长度
- poj 2515 差分序列,排列组合
- AOJ-517 序列(差分约束)
- 【差分序列】【NOIP2012】借教室
- [NOIP2012][二分][差分序列]借教室
- [时间序列分析][6]--季节差分
- [CF 295A]Grag and Array[差分数列]
- [CF Gym 100372C] Sergey and array
- CF295A Greg and Array(差分+前缀和)
- CF Array
- UVa 10407 Simple division (一阶差分序列 & gcd)
- 微信公众平台消息接口开发(8)小黄鸡(小贱鸡)机器人
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- ArcGlobe三维开发之八————由指定路径创建动画(接口)
- C#中的事务处理
- Linux下LDAP Server/Client配置 --OpenLDAP
- CF 407C Curious Array(差分序列)
- error C2440: 如无法从“const char [N]”转换为“LPCWSTR” 的一点总结
- linux下抓包命令--tcpdump的使用
- Ubuntu 怎么在右键添加打开终端
- 华为OJ一个题目
- ECC的理解
- solr 自定义函数 评分函数
- paperclip多文件上传
- 设计模式之命令模式