牛客第十场Rikka with Prefix Sum
由于其中的2操作非常多,我们就需要将其快速的更改,就会用到组合数的东西
其实自己手写一下就可以发现对于一个点增加的值在经过不断地前缀和累加过程中对于一点的贡献满足杨辉三角
所以我们就需要记录一下其中的2操作数,在线操作
一点(i,j)在进行t次操作后对于(t,y)的贡献为C(t-i+y-j-1,t-i-1);
对于查询时我们就需要将当前的t+1进行查询,就可以就可以快速知道该点对于区间内的所有值的贡献
#include<bits/stdc++.h>
using namespace std;
const int maxn=4e6+;
const int mod=;
int pre[maxn+],inv[maxn+],len;
struct ss
{
int x;
int y;
int w;
}bos[maxn+];
int quick(int a,int b)
{
int ans=;
while(b)
{
if(b&)ans=1ll*ans*a%mod;
a=1ll*a*a%mod;
b>>=;
}
return ans;
}
int C(int n,int m)
{
return 1ll*pre[n]*inv[m]%mod*inv[n-m]%mod;
}
int query(int pos,int t)
{
int ans=;
for(int i=;i<=len;i++)
{
if(bos[i].y<=pos)ans=(ans+1ll*bos[i].w*C(pos-bos[i].y+t-bos[i].x-,t-bos[i].x-))%mod;
}
return ans;
}
void solve()
{
int n,m;
scanf("%d%d",&n,&m);
int t=;len=;
while(m--)
{
int k;
scanf("%d",&k);
if(k==)
{
int l,r,w;
scanf("%d%d%d",&l,&r,&w);
bos[++len]=(ss){t-,l,w};
bos[++len]=(ss){t-,r+,(mod-w)%mod};
}
else if(k==)t++;
else
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",(query(r,t+)-query(l-,t+)+mod)%mod);
}
}
}
int main()
{
pre[]=;
//int N=1e5;
for(int i=;i<=maxn;i++)
{
pre[i]=1ll*pre[i-]*i%mod;
}
// cout<<pre[N]<<endl;
inv[maxn]=quick(pre[maxn],mod-);
//cout<<inv[N]<<endl;
for(int i=maxn-;i>=;i--)
{
inv[i]=1ll*inv[i+]*(i+)%mod;
} int t;
for(scanf("%d",&t);t;t--)
{
solve();
}
return ;
}
牛客第十场Rikka with Prefix Sum的更多相关文章
- 牛客多校第十场-D- Rikka with Prefix Sum
链接:https://www.nowcoder.com/acm/contest/148/D来源:牛客网 Prefix Sum is a useful trick in data structure p ...
- 牛客第十场 F.Popping Balloons
第一维直接遍历 第二维用线段树维护每个最左端可以得到的贡献 在线段树上每次删除一个点会影响到 X X-R X-2*R 3个值 最多操作1e5次 复杂度 6*n*logn(删了还要加回来 #i ...
- Wood Processing牛客第十场 斜率优化DP
卧槽我感觉写的是对的,但是就是样例都过不了...留坑 #include<iostream> #include<stdio.h> #include<string.h> ...
- 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (数学)
Rikka with Prefix Sum 题意: 给出一个数组a,一开始全为0,现在有三种操作: 1. 1 L R W,让区间[L,R]里面的数全都加上W: 2. 2 将a数组变为其前缀 ...
- Rikka with Prefix Sum(组合数学)
Rikka with Prefix Sum 题目描述 Prefix Sum is a useful trick in data structure problems. For example, giv ...
- Rikka with Prefix Sum
Rikka with Prefix Sum 题目 https://www.nowcoder.com/acm/contest/148/D 题目有三个操作 l到r都添加一个数 取一次前缀和 查询区间和 这 ...
- 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树
目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...
- 牛客网第二场Jfarm(随机化+二维前缀和)
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 White Rabbit has a rectangular farmland of n*m. ...
- 牛客网第一场E题 Removal
链接:https://www.nowcoder.com/acm/contest/139/E 来源:牛客网 Bobo has a sequence of integers s1, s2, ..., sn ...
随机推荐
- SYN6101型 RS485子钟
SYN6101型 RS485子钟 产品概述 SYN6101型RS485子钟是由西安同步电子科技有限公司精心设计.自行研发生产的一套以通过RS485总线复接或串行与母钟连接的子钟,接收母钟发送来的时间 ...
- mini木马c源码
#pragma comment(lib, "ws2_32.lib") #pragma comment(linker,"/subsystem:\"windows\ ...
- 系统学习 Java IO (十六)----这么多类,应该用哪个?
目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...
- vim配置轻量级IDE
安装VIM 安装YouCompleteMe的时候, 需要VIM的版本比较高, 一般一些Linux长期支持版的Vim包就比较老, 所以可能需要编译安装. 卸载之前系统中安装的版本: CentOS/Fed ...
- 分析了16年的福利彩票记录,原来可以用Python这么买彩票
目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖 ...
- 公司倒闭 1 年了,而我当年的项目上了 GitHub 热榜
公司倒闭 1 年多了,而我在公司倒闭时候做的开源项目,最近却上了 GitHub Trending,看着这个数据,真是不胜唏嘘. 缘起 2017 年 11 月份的时候,松哥所在的公司因为经营不善要关门了 ...
- 网络虚拟化基础协议·Geneve
[分层] 要实现网络虚拟化,最基础的技术肯定是分层(OverLay & UnderLay). ·UnderLay 中文释义中,老房子漏雨,在房子里面撑一把大雨伞,这把大雨伞就是UnderLay ...
- 56. Merge Interval
56. Merge Interval 0. 参考文献 序号 文献 1 花花酱 LeetCode 56. Merge Intervals 2 [LeetCode] Merge Intervals 合并区 ...
- cookie 和 session 设置
cookie: 保存在浏览器上的一组键值对, 是由服务器让浏览器进行设置的 下次浏览器访问的时候会携带cookie. request是客户端请求, response是服务端响应. 读取客户端的cook ...
- (转)User-Agent的由来(原来这么有意思)
你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样?Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ( ...