题面

注意一个细节,查询和更新都需要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. CSS颜色透明度

    怎样用CSS样式表来设置DIV的透明半透明? ㈠首先说一下设置DIV半透明的CSS代码: div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity: ...

  2. react-router中,<switch>

    有<Switch>标签,则其中的<Route>在路径相同的情况下,只匹配第一个,这个可以避免重复匹配: 无<Switch>标签,则其中的<Route>在 ...

  3. THUWC 2019游记

    坑先占着QwQ 不太喜欢写Blog, 因此我的Blog一直很冷清,但是还是想写写这种游记啦,反正是给自己看的 Day -4 颓了一整天,一道题都没写 于是无聊用GL写了一个海战游戏,让两个程序对打-- ...

  4. jQuery_完成表单注册检验

    在校验表单的时候会很麻烦,但是jq可以用很简单的方法来检验,即使用validate. 原表单: 代码 <!DOCTYPE html> <html> <head> & ...

  5. CodeForces–471D--MUH and Cube Walls(KMP)

    Time limit         2000 ms  Memory limit  262144 kB Polar bears Menshykov and Uslada from the zoo of ...

  6. spring-boot 中实现标准 redis 分布式锁

    一,前言 redis 现在已经成为系统缓存的必备组件,针对缓存读取更新操作,通常我们希望当缓存过期之后能够只有一个请求去更新缓存,其它请求依然使用旧的数据.这就需要用到锁,因为应用服务多数以集群方式部 ...

  7. war包部署到tomcat

    1.maven web app打包成app.war.打包命令:mvn  clean package Dmaven.test.skip=true war 是什么?里面有什么东西?a.web.app所有必 ...

  8. LVS负载均衡DR工作流程

    LVS负载均衡DR工作流程 (a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链. 此时报文的源IP为CIP,目标IP为VIP (b) PRE ...

  9. i 是一个修饰符 (搜索不区分大小写)

    什么是正则表达式? 正则表达式是由一个字符序列形成的搜索模式. 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容. 正则表达式可以是一个简单的字符,或一个更复杂的模式. 正则表达式可用于所 ...

  10. Learn The Architecture Memory Management 译文

    1.概述 本文档介绍了ARMv8-A架构内存管理的关键——内存地址转换,包括虚拟地址(VA)到物理地址(PA)的转换.页表(或称地址转换表)格式以及TLBs(Translation Lookaside ...