博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nssl1259-sequence【组合数,差分】
阅读量:2024 次
发布时间:2019-04-28

本文共 865 字,大约阅读时间需要 2 分钟。

正题


题目大意

操作 ( l , r , k ) (l,r,k) (l,r,k)表示

l ∼ r l\sim r lr这段区间,对于每个 i i i,加上 C k i + k − l C_k^{i+k-l} Cki+kl


解题思路

我们可以发现对于一个全是1的序列,求 k k k次前缀和,就是杨辉三角的第 k + 1 k+1 k+1列,那么对于次修改,我们用k阶差分修改。最后取 k k k次前缀和


code

#include
#include
#define N 500050#define ll long longusing namespace std;ll n,m,c[N][25],s[N][25],l,r,k;const ll XJQ=1e9+7;int main(){
scanf("%lld%lld",&n,&m); c[0][0]=1; for(ll i=1;i<=n+20;i++)//预处理C {
c[i][0]=1; for(ll j=1;j<=min(i,20ll);j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%XJQ; } for(ll i=1;i<=m;i++) {
scanf("%lld%lld%lld",&l,&r,&k); for(ll j=0;j<=k;j++)//k阶差分 {
(s[l][j]+=c[k][k-j])%=XJQ; (s[r+1][j]-=c[r-l+k+1][k-j])%XJQ; } } for(ll i=1;i<=n;i++) for(ll j=0;j<=20;j++)//k次前缀合 s[i+1][j]=(((s[i+1][j]+s[i][j]%XJQ+XJQ)+s[i][j+1])%XJQ+XJQ)%XJQ; for(ll i=1;i<=n;i++) printf("%lld\n",s[i][0]);}

转载地址:http://oxzaf.baihongyu.com/

你可能感兴趣的文章
matlab2014a win安装教程
查看>>
MATLAB 编译java步骤
查看>>
Linux服务器命令行模式安装 matlab2015a linux64
查看>>
linux 下多个java jdk 切换
查看>>
Kd-Tree算法原理
查看>>
CentOS 6 下编译安装nginx 参数配置
查看>>
linux 查看文件夹下的文件个数
查看>>
CentOS6.5 下编译安装php-5.6.3.tar.gz
查看>>
ubuntu vi 方向键、删除键问题
查看>>
ubuntu14.04安装cuda
查看>>
IP Tracker 追踪
查看>>
tensorflow的Virtualenv安装方式安装
查看>>
Chrome.storage和HTML5中localStorage的差异
查看>>
三种EBS类型解析
查看>>
HttpClients4.*版本超时设置
查看>>
Solr ShingleFilter
查看>>
Solr Filter 详解
查看>>
pyton 派森第一个mongodb 例子
查看>>
程序员的三种美德
查看>>
java httpclient4.X 无法判断文件大小问题
查看>>