题面

注意一个细节,查询和更新都需要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 维护序列 题解的更多相关文章

  1. BZOJ 1500 洛谷2042维护序列题解

    BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的 ...

  2. 洛谷 P2023 维护序列——线段树

    先上一波题目 https://www.luogu.org/problem/P2023 复习了一波线段树 题目涉及的操作有区间加 区间乘以及区间求和 tips:线段树在传标记的时候 优先传乘法标记再传加 ...

  3. 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)

    洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...

  4. 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)

    洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...

  5. 洛谷 P1628 合并序列

    洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...

  6. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  7. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  8. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  9. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

随机推荐

  1. CSP-S2 游记

    CSP-S2 游记 & AFO 感想 Day0 早上考了一场式,非常简单,但是懒得写正解.230pts. 晚上听了一下WYQ大神的考前直播,写了一下树上倍增(我是不会告诉你我还写炸了) 与lu ...

  2. 在网页中嵌套网页的方法(frame)

    在网页中嵌套网页目前通用的方法是通过 frame 框架来完成,该方法有实际的应用意义.也能很好的解决一些问题. 但是 JS 在操作的时候需要同源(不能跨域), 否则一切 js 相关的操作无法完成. 切 ...

  3. Jmeter(四)Cookie管理器

    上一节中我们用Jmeter通过接口上传了一张图片到人人网,其中请求头中的Cookie是写死的,这个Cookie其实是登录成功后服务器返回给客户端的,客户端接收到这个Cookie后保存下来,在后续向服务 ...

  4. 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec  内存限制: 259 MB 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他 ...

  5. ubuntu搭建、安装gitlab服务器以及初始化密码

    本为14.04 在搭建之前要确定其网络环境是没有问题.用root身份进行操作 1.安装和配置必要的依赖关系 apt-get update apt-get install -y curl openssh ...

  6. 微信小程序_(视图)简单的scroll-view容器

    scroll-view容器效果 官方文档:传送门 scroll-view 可滚动视图区域 scroll-x Boolean false 允许横向滚动 scroll-y Boolean false 允许 ...

  7. 详解vue的diff算法原理

    我的目标是写一个非常详细的关于diff的干货,所以本文有点长.也会用到大量的图片以及代码举例,目的让看这篇文章的朋友一定弄明白diff的边边角角. 先来了解几个点... 1. 当数据发生变化时,vue ...

  8. 误删系统服务Task Schedule的恢复方法

    cmd命令 sc query Schedule查询该服务是否存在 sc delete Schedule删除服务 sc create Schedule binpath= "C:\Windows ...

  9. 前端开发——让算法"动"起来

    正文 当然在我们不清楚具体操作细节前我们可以先假设一下,我们能够用什么来实现.按照以前看过的排序动画我将其分为 1.Js操作Dom,再搭配简单的css 2.Canvas动画 之后在查资料的时候发现还有 ...

  10. servlet3.0无web.xml

    大家应该都已经知道spring 3.1对无web.xml式基于代码配置的servlet3.0应用.通过spring的api或是网络上高手们的博文,也一定很快就学会并且加到自己的应用中去了.PS:如果还 ...