洛谷 P2023 维护序列 题解
注意一个细节,查询和更新都需要pushdown();
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,p;
int a[];
struct ha{
long long v;
long long mul;
long long add;
}tree[];
void build(int k,int l,int r)
{
tree[k].mul=;
tree[k].add=;
if(l==r){
tree[k].v=a[l];
}
else{
int mid=(l+r)/;
build(k<<,l,mid);
build(k<<|,mid+,r);
tree[k].v=tree[k<<].v+tree[k<<|].v;
}
tree[k].v%=p;
return;
}
void pushdown(int k,int l,int r)
{
int mid=(l+r)/;
tree[k<<].v=(tree[k<<].v*tree[k].mul+tree[k].add*(mid-l+))%p;
tree[k<<|].v=(tree[k<<|].v*tree[k].mul+tree[k].add*(r-mid))%p;
tree[k<<].mul=(tree[k<<].mul*tree[k].mul)%p;
tree[k<<|].mul=(tree[k<<|].mul*tree[k].mul)%p;
tree[k<<].add=(tree[k<<].add*tree[k].mul+tree[k].add)%p;
tree[k<<|].add=(tree[k<<|].add*tree[k].mul+tree[k].add)%p;
tree[k].mul=;
tree[k].add=;
return;
}
void muladd(int k,int l,int r,int x,int y,int goal)
{
if(y<l||x>r){
return;
}
if(x<=l&&r<=y){
tree[k].v=(tree[k].v*goal)%p;
tree[k].mul=(tree[k].mul*goal)%p;
tree[k].add=(tree[k].add*goal)%p;
return;
}
pushdown(k,l,r);
int mid=(l+r)/;
muladd(k<<,l,mid,x,y,goal);
muladd(k<<|,mid+,r,x,y,goal);
tree[k].v=(tree[k<<].v+tree[k<<|].v)%p;
return;
}
void addadd(int k,int l,int r,int x,int y,int goal)
{
if(x>r||y<l){
return;
}
if(x<=l&&y>=r){
tree[k].add=(tree[k].add+goal)%p;
tree[k].v=(tree[k].v+goal*(r-l+))%p;
return;
}
pushdown(k,l,r);
int mid=(l+r)/;
addadd(k<<,l,mid,x,y,goal);
addadd(k<<|,mid+,r,x,y,goal);
tree[k].v=(tree[k<<].v+tree[k<<|].v)%p;
return;
}
int ask(int k,int l,int r,int x,int y)
{
if(x>r||y<l){
return ;
}
if(x<=l&&y>=r){
return tree[k].v;
}
pushdown(k,l,r);
int mid=(l+r)/;
return (ask(k<<,l,mid,x,y)+ask(k<<|,mid+,r,x,y))%p;
}
signed main()
{
cin>>n>>p;
for(int i=;i<=n;i++){
cin>>a[i];
}
build(,,n);
cin>>m;
for(int i=;i<=m;i++){
int type;
cin>>type;
if(type==){
int x,y,v;
cin>>x>>y>>v;
muladd(,,n,x,y,v);
}
else if(type==){
int x,y,v;
cin>>x>>y>>v;
addadd(,,n,x,y,v);
}
else{
int x,y;
cin>>x>>y;
cout<<ask(,,n,x,y)<<endl;
}
}
}
洛谷 P2023 维护序列 题解的更多相关文章
- BZOJ 1500 洛谷2042维护序列题解
		BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的 ... 
- 洛谷 P2023 维护序列——线段树
		先上一波题目 https://www.luogu.org/problem/P2023 复习了一波线段树 题目涉及的操作有区间加 区间乘以及区间求和 tips:线段树在传标记的时候 优先传乘法标记再传加 ... 
- 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)
		洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ... 
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
		洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ... 
- 洛谷 P1628 合并序列
		洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ... 
- 【洛谷P3960】列队题解
		[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ... 
- 洛谷 P1220 关路灯 题解
		Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ... 
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
		洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ... 
- 洛谷P2312 解方程题解
		洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ... 
随机推荐
- Markdown 标记语言指北
			这是班刊约稿的一篇文章. 全文约6000字, 预计需要 60 分钟读完. Markdown 标记语言指北 TOC 什么是 Markdown? Markdown 可以用来干什么? 第一步? 一些专业一点 ... 
- 窗体操作:GetWindowLong()
			函数原型: LONG GetWindowLong( HWND hWnd,int nIndex ) 参数: hWnd:指定窗口的句柄 nIndex:需要获得的信息的类型 值 ... 
- linux环境下写C++操作mysql(一)
			/***************** connect.cpp g++ connect.cpp -o connect -I /usr/include/mysql/ -L /usr/lib/mysql/ ... 
- Linux命令-文件管理(一)
			Linux命令-文件管理(一) 1.命令:cat cat命令用于把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 使用权限:所有使用者 语法格式:cat [-AbeEn ... 
- Jmeter -- 添加断言,及断言结果
			步骤: 1. 添加响应断言(添加-断言-响应断言) Add --> Assertions --> Response Assertion 2. 配置断言 判断响应内容中,是否包含关键字“禅 ... 
- phpfor函数和foreach函数
			PHP for 循环 PHP While 循环 PHP 函数 PHP for 循环执行代码块指定的次数. PHP for 循环 如果您已经提前确定脚本运行的次数,可以使用 for 循环. 语法 for ... 
- Class constructor FileManager cannot be invoked without 'new' in undefined (line undefined, column undefined)
			解决办法: 1.删除package.json属性devDependencies的 less 和 less-loader ; 2.重新安装 npm i less less-loader --save-d ... 
- Java连接MQTT服务-ws方式
			特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ... 
- 第六周学习总结&java实验报告四
			第六周学习总结&java实验报告四 学习总结: 上一周因为接近国庆假期,所以老师没有讲太多的新知识点,只要是带我们一起做了一个动物模拟变声器的实验,进一步了解和学习到继承的 有关知识点和应用: ... 
- CentOS 7,使用yum安装Nginx
			https://www.centos.bz/2018/01/centos-7%EF%BC%8C%E4%BD%BF%E7%94%A8yum%E5%AE%89%E8%A3%85nginx/ 文章目录 [隐 ... 
