洛谷 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\) ...
随机推荐
- Flash大文件断点续传解决方案
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- 《python cookbook》学习笔记
2016.5.3 第8章 类与对象 8.1 改变对象的字符串显示 __str__ 和 __repr__ %s 和 %r,提到了eval,我没有用过 8.2 自定义字符串的格式化 __forma ...
- 手动升级 Confluence 6 - 升级以后
7. 重新安装服务(仅针对 Windows) 如果你的 Confluence 安装实例在 Windows 中是以服务来运行的话,你需要删除已经存在的 Windows 服务,然后重新安装 Windows ...
- 快速搭建 Serverless 人脸识别离线服务
简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- 客户端框架-MVC
MVC Model-View-Controller MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model( ...
- 2018-2019-2 网络对抗技术 20165232 Exp 9 Web安全基础
2018-2019-2 网络对抗技术 20165232 Exp 9 Web安全基础 实验任务 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF) ...
- Oracle 数据完整性与约束机制
为了维护数据库数据的完整性,在创建表时需要定义一些约束,Oracle中的约束类型包括:非空约束.主键约束.唯一约束.外键约束等.在对约束操作前,我们可以通过表名查询它具有的约束信息. 表约束 SELE ...
- day8_文件操作及编码解码
一.文件操作基本流程 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所 ...
- 统计学_F分布(图文详解和python脚本实现)
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- navivate 下载
https://www.jianshu.com/p/5f693b4c9468?mType=Group