Rikka with Prefix Sum
Rikka with Prefix Sum
题目
题目有三个操作
- l到r都添加一个数
- 取一次前缀和
- 查询区间和
这三个操作实际上都跟求前缀和有关。
如果把操作2当作时间戳 进行一次操作2时间就加一,而操作一相当于时间-1的时候对l点加w,对r+1点加-w。而查询操作就相当于时间+1的时候query(r)-query(l-1)。
那求前缀和该怎么做呢?刚开始我想的是用树状数组,但是要求很多次前缀和,复杂度不允许。我们可以打个表找一下规律。
若在某点添加1
time | a1 | a2 | a3 | a4 |
---|---|---|---|---|
0 add | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 3 | 4 |
3 | 1 | 3 | 6 | 10 |
4 | 1 | 4 | 10 | 20 |
5 query | 1 | 5 | 15 | 35 |
看上去是不是很眼熟:
相当于倾斜45°的杨辉三角
然后找出规律
于是:单点修改对一点贡献度为
C(L+T-1,T-1) * V
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=998244353;
const int maxn=1e5+7;
ll inv[maxn<<1],fac[maxn<<1];
template<class T>
void read(T &res)
{
res=0;
char c=getchar();
T f=1;
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
res=res*10+c-'0';
c=getchar();
}
res*=f;
}
ll qpow(ll x,ll n){
ll ret=1;
x%=mod;
while(n){
if(n&1) ret=ret*x%mod;
x=x*x%mod;
n>>=1;
}
return ret;
}
void init()
{
int N=maxn*2;
fac[0]=1;
for(int i=1;i<N;i++){
fac[i]=fac[i-1]*i%mod;
}
inv[N-1]=qpow(fac[N-1],mod-2);
for(int i=N-2;i>=0;i--){
inv[i]=inv[i+1]*(i+1)%mod;
}
}
ll c(int n,int k)
{
if(k>n||k<0) return 0;
return fac[n]*inv[k]%mod*inv[n-k]%mod;
}
struct node
{
int time;
int val;
int id;
}s[maxn];
int tol;
ll query(int a,int b)
{
ll ans=0;
for(int i=0;i<tol;i++){
if(s[i].time<=a&&s[i].id<=b)
{
ans=(ans+c(a-s[i].time+b-s[i].id-1,a-s[i].time-1)*s[i].val%mod)%mod;
}
}
return ans;
}
int main()
{
int t;
read(t);
init();
while(t--){
int n,m,op,l,r,w;
read(n);
read(m);
tol=0;
int cur=1;
for(int i=1;i<=m;i++){
read(op);
if(op==1){
read(l),read(r),read(w);
s[tol].id=l,s[tol].val=w%mod ,s[tol].time=cur-1;
tol++;
s[tol].id=r+1,s[tol].val=-w%mod ,s[tol].time=cur-1;
tol++;
}
else if(op==2) cur++;
else if(op==3){
read(l);
read(r);
ll ans=query(cur+1,r)-query(cur+1,l-1);
ans=(ans%mod+mod)%mod;
printf("%lld\n",ans);
}
}
}
return 0;
}
Rikka with Prefix Sum的更多相关文章
- 牛客网暑期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 ...
- 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (组合数学)
https://www.nowcoder.com/acm/contest/148/D 题意 一个A数组,初始全为0.现有三种操作,1:给区间[L,R]+w:2:把每个位置的元素变为其前缀和:3:求区间 ...
- 2018牛客网暑假ACM多校训练赛(第十场)D Rikka with Prefix Sum 组合数学
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-D.html 题目传送门 - https://www.n ...
- 牛客多校10 D Rikka with Prefix Sum 不是数据结构
https://www.nowcoder.com/acm/contest/148/D 题意: 1e5个数,1e5个操作,操作分为: 1.区间加. 2.整个数列替换为前缀和. 3.区间查询. 查询数小于 ...
- 牛客第十场Rikka with Prefix Sum
由于其中的2操作非常多,我们就需要将其快速的更改,就会用到组合数的东西 其实自己手写一下就可以发现对于一个点增加的值在经过不断地前缀和累加过程中对于一点的贡献满足杨辉三角 所以我们就需要记录一下其中的 ...
- 牛客多校第十场-D- Rikka with Prefix Sum
链接:https://www.nowcoder.com/acm/contest/148/D来源:牛客网 Prefix Sum is a useful trick in data structure p ...
- 4.4 CUDA prefix sum一步一步优化
1. Prefix Sum 前缀求和由一个二元操作符和一个输入向量组成,虽然名字叫求和,但操作符不一定是加法.先解释一下,以加法为例: 第一行是输入,第二行是对应的输出.可以看到,Output[1] ...
- Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...
随机推荐
- PAT Advanced 1034 Head of a Gang (30) [图的遍历,BFS,DFS,并查集]
题目 One way that the police finds the head of a gang is to check people's phone calls. If there is a ...
- [极客大挑战 2019]FinalSQL
0x00 知识点 盲注 0x01 解题 根据题目提示盲注,随便点几下找到注入点 发现我们输入^符号成功跳转页面,证明存在注入 1^(ord(substr((select(group_concat(sc ...
- pytorch学习问题汇总
问题六: 问题五:这里是怎么得到的? 问题四:为什么会是如下结果? torch.bernoulli(a)怎么是这个结果? 问题1:torch各个类型数据格式如何转换?数据类型在官方文档torch.Te ...
- 第22章—开启HTTPS
spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxia ...
- Python Learning Day2
练习:login功能 def login(): with open(r'C:\Users\liubin\desktop\user.txt','r') as f: res=f.read() flag=1 ...
- centos6-7 yum安装php的方法
1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 yum remove php.x86_64 php-cli.x86_64 ph ...
- zabbix添加主机步骤
创建主机 配置基本信息 配置好后点击添加即可: [root@localhost opt]# systemctl start zabbix-agent [root@localhost opt]# net ...
- IUBS|CODATA|Open Data in a Big Data World|National Genomics Data Center
生命组学: National Genomics Data Center中的section: LncRNA知识库+non-code加入RNA central GWAS Atlas基因组关联分析数据库 E ...
- [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取
0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...
- Maven--部署构件至 Nexus
日常开发生成的快照版本构件可以直接部署到 Nexus 中策略为 Snapshot 的宿主仓库中,项目正式发布的构件则应该部署到 Nexus 中策略为 Release 的宿主仓库中. <proje ...