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 ...
随机推荐
- 浅谈ASCII 、ISO8859-1、GB2312、GBK、Unicode、UTF-8 的区别。
浅谈ASCII .ISO8859-1.GB2312.GBK.Unicode.UTF-8 的区别. 首先,先科普一下什么是字符编码.字符是指一种语言中使用的基本实体,比如英文中的26个英文字母,标点符号 ...
- 第二阶段scrum-1
1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 注册登陆界面功能正在实装,消息收发功能正在制作 雷达界面已经完成.
- Linux 压缩解压操作
Linux 压缩解压操作 Linux解压文件到指定目录 tar在Linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数:-c :create 建立压缩档案的 ...
- 支持 UTF-8 中文的串口调试工具
最近使用 mdk526,编辑设置使用 utf-8,编辑窗口中文正常,但是编译的时候提示 warning: #870-D: invalid multibyte character sequence,解决 ...
- 【Linux】linux磁盘管理
在服务器管理中,我们会关心硬盘用了多少,还有多少剩余空间,哪些文件占用空间最大等等.以便我们在合适的时机为服务器添加硬盘分区以及管理磁盘文件等操作,让磁盘的利用率最大化,现在我们看下linux系统中和 ...
- python爬取招聘网站数据
# -*- coding: utf-8 -*- # 爬虫分析 from bs4 import BeautifulSoup from lxml import etree from selenium im ...
- jdk 的安装教程
1. 配置的位置 鼠标右击计算机----属性-----高级系统设置---环境变量----在系统变量中配置(推荐) 2.增加环境变量 (1)新建 ----- 变量名: JAVA_HOME 变量值 ...
- delphi try except与try finally语句用法以及区别
一.异常的来源 在Delphi的应用程序中,下列的情况都比较有可能产生异常. (1)文件处理 (2)内存分配 (3)Windows资源 (4)运行时创建对象和窗体 (5)硬件和操作系统冲突 二.异常的 ...
- Dynamics CRM - 如何通过 C# Plugin 给 Contact的 主键(FullName)赋值
Contact 是 CRM 默认带有的 Entity,主键是 <FullName>,根据开发需求,与主键相关的字段都被设置成隐藏,包括了<Full Name>,<Firs ...
- jquery 第一节 什么是jQuery
简单来说,jQuery就是javascript的一个框架,也可以说是javascript的一个库.