牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (数学)
Rikka with Prefix Sum
题意:
给出一个数组a,一开始全为0,现在有三种操作:
1. 1 L R W,让区间[L,R]里面的数全都加上W;
2. 2 将a数组变为其前缀和数组;
3. 3 L R 询问此时a数组区间[L,R]的和。
题解:
第一种操作我们可以简化为a[L]+W,a[R+1]-W,利用差分数组的思想。
接下来这一步使关键,考虑i这个位置有值a[i],然后经过多次2操作对后面的值的贡献,先可以从a[i]=1考虑,然后推广就是了= =
发现1这个数对后面位置的贡献随着位置的增加与组合数有关,这个可以自己去找下规律。
然后还有一个就是求区间和的时候,可以从组合数的性质C(i,j)=C(i-1,j-1)+C(i-1,j)去推导。
最后一点,由于一开始我们对区间修改是对点修改的,假设对点修改后进行了i次2操作,现在求区间和时,其实是求i+1次2操作后的区间和,这一步如果之前第二步推好了是很好解决的。
注意上面几点是息息相关的,需要自己耐心地找规律。
另外再稍微提醒一下,由于组合数二维数组预处理空间开不下,所以只能利用阶乘来算,后面取模时就涉及到了逆元。如果不清楚逆元可以去看看 费马小定理。
逆元可以直接用快速幂来求,但我直接求T了,所以用一个数组事先预处理一下...
因此要预处理两个数组出来,同时数组长度要开大一倍,这把上面推好了自然就知道了~
给出代码吧:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+,MOD = ;
int t,n,m,tot;
int l[N],r[N],w[N],s[N];
ll fac[N],inv[N];
ll qp(ll a,ll b){
ll ans = ;
while(b){
if(b&) ans=ans*a%MOD;
a=a*a%MOD;
b>>=;
}
return ans ;
}
ll C(ll a,ll b){
return fac[a]*qp(fac[b]*fac[a-b]%MOD,MOD-)%MOD;
}
ll query(ll L,ll R,ll cnt){
if(L-<) return C(cnt+R+,R)%MOD;
return ((C(cnt+R+,R)-C(cnt+L+,L-))%MOD+MOD)%MOD;
}
int main(){
scanf("%d",&t);
fac[]=;
for(int i=;i<=2e5;i++) fac[i]=fac[i-]*i%MOD;
while(t--){
tot=;memset(s,,sizeof(s));
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int op;
scanf("%d",&op);
if(op==){
scanf("%d%d%d",&l[tot],&r[tot],&w[tot]);
r[tot]++;
tot++;
}else if(op==) s[tot-]++;
else{
int L,R;
scanf("%d%d",&L,&R);
ll ans = ;
int cnt = ;
for(int i=tot-;i>=;i--){
cnt+=s[i];
if(l[i]<=R)
ans=(ans+(ll)w[i]*query(max(l[i],L)-l[i],R-l[i],cnt-)%MOD)%MOD;
if(r[i]<=R)
ans=(ans-(ll)w[i]*query(max(r[i],L)-r[i],R-r[i],cnt-)%MOD+MOD)%MOD;
}
printf("%lld\n",ans);
}
}
}
return ;
}
牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (数学)的更多相关文章
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- 牛客网 暑期ACM多校训练营(第一场)A.Monotonic Matrix-矩阵转化为格子路径的非降路径计数,Lindström-Gessel-Viennot引理-组合数学
牛客网暑期ACM多校训练营(第一场) A.Monotonic Matrix 这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你 ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 牛客网暑期ACM多校训练营(第九场) A题 FWT
链接:https://www.nowcoder.com/acm/contest/147/A来源:牛客网 Niuniu has recently learned how to use Gaussian ...
- 牛客网暑期ACM多校训练营(第九场)D
链接:https://www.nowcoder.com/acm/contest/147/D来源:牛客网 Niuniu likes traveling. Now he will travel on a ...
- 牛客网暑期ACM多校训练营(第二场)B discount
链接:https://www.nowcoder.com/acm/contest/140/B来源:牛客网 题目描述 White Rabbit wants to buy some drinks from ...
- 2018牛客网暑期ACM多校训练营(第一场)D图同构,J
链接:https://www.nowcoder.com/acm/contest/139/D来源:牛客网 同构图:假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所 ...
- 牛客网暑期ACM多校训练营(第二场) I Car 思维
链接:https://www.nowcoder.com/acm/contest/140/I来源:牛客网 White Cloud has a square of n*n from (1,1) to (n ...
- 牛客网暑期ACM多校训练营(第二场) D money 思维
链接:https://www.nowcoder.com/acm/contest/140/D来源:牛客网 White Cloud has built n stores numbered from 1 t ...
随机推荐
- 深入理解java虚拟机学习笔记(一)JVM内存模型
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...
- 配置intellij idea中的欢迎页而不使用默认的index.jsp
在web.xml中添加 <welcome-file-list> <welcome-file>abc.jsp</welcome-file> </welcome- ...
- c#字符显示转换{0:d} string.Format()
这一篇实际和前几个月写的没什么本质上的区别.但是这篇更明确一点,学起来easy c#字符显示转换{0:d} C#:String.Format数字格式化输出 : int a = 12345678; // ...
- python--Matplotlib(二)
Matplotlib+pandas作图 一.对csv文件进行提取ruixi.csv 对上述表格进行提取并做图 #-*- coding:utf-8 -*- import matplotlib as mp ...
- 【CSS】多行溢出显示省略号
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;//超出三行隐藏 overflow: hidden; ...
- 微信小程序推广方案
拥有小程序只是基础,能玩转小程序运营才是关键.本文将会简单讲述十种最实用的小程序推广策略,结合具体案例阐述商家企业如何在拥有小程序后玩转小程序,快速实现小程序的推广. 一. 公众号+小程序 小程序可以 ...
- php扩展开发-MINFO
我们在用PHPinfo函数或命令行的php -i命令查看php环境相关的信息,当我们开发完成一个自己的扩展,除非这个扩展就是你自己所使用,否则你就需要对扩展进行相关的介绍,或者显示扩展用到的ini配置 ...
- Android 使用Retrofit2.0+OkHttp3.0实现缓存处理+Cookie持久化第三方库
1.Retrofit+OkHttp的缓存机制 1.1.第一点 在响应请求之后在 data/data/<包名>/cache 下建立一个response 文件夹,保存缓存数据. 1.2.第二点 ...
- 洛谷P1451 求细胞数量
求细胞数量 题目链接 这道题大概是一个最简单的联通块的题了qwq 注意枚举起点的时候 一定不要从0开始不然你就会从0进入到了其他联通块中从而多查. 一定看清题意这道题不是同色为联通块!!! AC代码如 ...
- 《Cracking the Coding Interview》——第14章:Java——题目2
2014-04-26 18:44 题目:在java的try-catch-finally语句块里,如果catch里面有return语句的话,finally还会被执行吗? 解法:会. 代码: // 14. ...