由于其中的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的更多相关文章

  1. 牛客多校第十场-D- Rikka with Prefix Sum

    链接:https://www.nowcoder.com/acm/contest/148/D来源:牛客网 Prefix Sum is a useful trick in data structure p ...

  2. 牛客第十场 F.Popping Balloons

    第一维直接遍历 第二维用线段树维护每个最左端可以得到的贡献 在线段树上每次删除一个点会影响到 X   X-R   X-2*R  3个值 最多操作1e5次 复杂度 6*n*logn(删了还要加回来 #i ...

  3. Wood Processing牛客第十场 斜率优化DP

    卧槽我感觉写的是对的,但是就是样例都过不了...留坑 #include<iostream> #include<stdio.h> #include<string.h> ...

  4. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (数学)

    Rikka with Prefix Sum 题意: 给出一个数组a,一开始全为0,现在有三种操作: 1.  1 L R W,让区间[L,R]里面的数全都加上W: 2.  2     将a数组变为其前缀 ...

  5. Rikka with Prefix Sum(组合数学)

    Rikka with Prefix Sum 题目描述 Prefix Sum is a useful trick in data structure problems. For example, giv ...

  6. Rikka with Prefix Sum

    Rikka with Prefix Sum 题目 https://www.nowcoder.com/acm/contest/148/D 题目有三个操作 l到r都添加一个数 取一次前缀和 查询区间和 这 ...

  7. 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树

    目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...

  8. 牛客网第二场Jfarm(随机化+二维前缀和)

    链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 White Rabbit has a rectangular farmland of n*m. ...

  9. 牛客网第一场E题 Removal

    链接:https://www.nowcoder.com/acm/contest/139/E 来源:牛客网 Bobo has a sequence of integers s1, s2, ..., sn ...

随机推荐

  1. SYN5006型电机同步编码脉冲分配器

    SYN5006型电机同步编码脉冲分配器 编码器信号分配板增量式编码器脉冲分配器使用说明视频链接: http://www.syn029.com/h-pd-81-0_310_13_-1.html 请将此链 ...

  2. Spring之Bean的装配

    一.Bean的装配Bean的装配,即Bean对象的创建.容器根据代码要求创建Bean对象后再传递给代码的过程,称为Bean的装配.1.默认装配方式代码通过getBean()方式从容器获取指定的Bean ...

  3. Python 爬虫从入门到进阶之路(十一)

    之前的文章我们介绍了一下 Xpath 模块,接下来我们就利用 Xpath 模块爬取<糗事百科>的糗事. 之前我们已经利用 re 模块爬取过一次糗百,我们只需要在其基础上做一些修改就可以了, ...

  4. Docker入门简介(一)

    Docker 介绍 Docker是Docker.lnc公司开源的一个基于LXC技术智商构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源. Do ...

  5. vSphere 5.5.0 U1配置问题:主机的快速统计信息不是最新的(转载)

    最近公司新购置了几台DELL服务器用来上桌面虚拟化,前期搭建测试环境进行功能验证,底层自然而然的选择VMware ESXi,当前最新版本为ESXi 5.5.0 U1,单独数据库安装,相对5.1来说,5 ...

  6. client-go中的golang技巧

    client-go中有很多比较有意思的实现,如定时器,同步机制等,可以作为移植使用.下面就遇到的一些技术讲解,首先看第一个: sets.String(k8s.io/apimachinery/pkg/u ...

  7. JAVA 从一个List里删除包含另一个List的数据

    /** * 从listA里删除listB里有的数据 * @param listA * @param listB * @return */ public static List<String> ...

  8. c++学习书籍推荐《The C++ Programming Language第四版》下载

    百度云及其他网盘下载地址:点我 作者简介 Bjarne Stroustrup is the designer and original implementer of C++, the author o ...

  9. Nginx+Tomat8负载后,利用Redis实现Tomcat8的session共享

    网上相应的文章应该都介绍,这里只特别记录下笔者在实操的过程出现的问题.此文件只针对tomcat 8 版本,之前版本可略过. tomcat 8 中的context.xml文件修改,增加以下配置. Jav ...

  10. 用Supervisor实现进程守护,在异常退出时自动重启

    程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...