由于其中的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. Java基础(四) StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础 ...

  2. Kafka笔记7

    Kafka提供了一些命令行工具,用于管理集群变更.这些工具使用Java实现,Kafka提供了一些脚本调用这些Java类. 9.1主题操作 使用Kafka-topics.sh工具可以执行主题大部分工作, ...

  3. hive -e和hive -f的区别(转)

    大家都知道,hive -f 后面指定的是一个文件,然后文件里面直接写sql,就可以运行hive的sql,hive -e 后面是直接用双引号拼接hivesql,然后就可以执行命令. 但是,有这么一个东西 ...

  4. shell把文件批量导入mysql

    for file in ./tmp_data/* do echo $file mysql -u'root' -p'wangbin' --default-character-set=utf8 -e&qu ...

  5. 在前后端分离项目中使用SpringBoot集成Shiro

    前言 这次在处理一个小项目时用到了前后端分离,服务端使用springboot2.x.权限验证使用了Shiro.前后端分离首先需要解决的是跨域问题,POST接口跨域时会预发送一个OPTIONS请求,浏览 ...

  6. spring 5.x 系列第7篇 —— 整合Redis客户端 Jedis和Redisson (xml配置方式)

    文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件 2.2 单机配置 ...

  7. Java中到底是值传递还是引用传递?

    Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...

  8. C# Redis分布式锁(基于ServiceStack.Redis)

    相关的文章其实不少,我也从中受益不少,但是还是想自己梳理一下,毕竟自己写的更走心! 首先给出一个拓展类,通过拓展方法实现加锁和解锁. 注:之所以增加拓展方法,是因为合理使用拓展类(方法),可以让程序更 ...

  9. MAC iterm2 常用快捷键大全

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 / command + 左右方向键 切换全屏:command + enter 查找:com ...

  10. 联盟链FISCO BCOS v2.0.0-rc3 发布

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...