由于其中的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. 分析RESTful API安全性及如何采取保护措施

    本文中讨论了API安全性和采用安全措施的重要性,如身份验证,API密钥,访问控制和输入验证. API设计的第一步是撰写接口文档 根据TechTarget(海外IT专业媒体)的定义,RESTful AP ...

  2. memcached分布式一致性哈希算法

    <span style="font-family: FangSong_GB2312; background-color: rgb(255, 255, 255);">如果 ...

  3. kubernetes实战篇之helm安装

    系列目录 Helm是kubernetes的应用包管理工具,是CNCF孵化器下的一个项目,主要用来管理 Charts.类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM.它提供了一种简单 ...

  4. MyBatis从入门到精通(四):MyBatis XML方式的基本用法之增删改

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. insert用法 1.1 简单的 ...

  5. Python将pyc转为py

    安装pip install uncompyle2, 使用uncompyle2 xxx.pyc > xxx.py

  6. 浅谈block, inline和inline-block的区别

    block 块元素    inline 内联元素 常见的块元素有:div, p, h1~h6, table, form, ol, ul等 常见的内联元素有:span, a, strong, em, l ...

  7. 数据预处理之独热编码(One-Hot):为什么要使用one-hot编码?

    一.问题由来 最近在做ctr预估的实验时,还没思考过为何数据处理的时候要先进行one-hot编码,于是整理学习如下:  在很多机器学习任务如ctr预估任务中,特征不全是连续值,而有可能是分类值.如下: ...

  8. HDU 1533:Going Home(KM算法求二分图最小权匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=1533 Going Home Problem Description   On a grid map there ...

  9. Appium+python自动化(十七)- 你难道猴哥失散多年的混血弟弟 - Monkey简介之开山篇(超详解)

    简介 今天由宏哥给小伙伴们来介绍猴哥的混血弟弟=Monkey.Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monk ...

  10. scrapy基础知识之scrapy自动下载图片pipelines

    需要在settings.py配置: ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1, }import os IMAGES_ ...