#include <bits/stdc++.h>
#define ll long long
#define N 4000010
using namespace std;
ll t[N],a[N],num[N],mt[N],mod;
void build(ll p, ll l, ll r)
{
mt[p]=1;
if(l==r){num[p]=a[l]%mod;return;}
ll mid=(l+r)>>1;
build(p<<1,l,mid);build(p<<1|1,mid+1,r);
num[p]=(num[p<<1]+num[p<<1|1])%mod;
}
void mp(ll p,ll l,ll r,ll x){mt[p]=mt[p]*x%mod;t[p]=t[p]*x%mod;num[p]=num[p]*x%mod;}
void upd(ll p,ll l,ll r,ll x){t[p]=(t[p]+x)%mod;num[p]=(num[p]+(r-l+1)*x)%mod;}
void pd(ll p,ll l,ll r)
{
ll mid =(l+r)>>1;
mp(p<<1,l,mid,mt[p]);mp(p<<1|1,mid+1,r,mt[p]);
upd(p<<1,l,mid,t[p]);upd(p<<1|1,mid+1,r,t[p]);
mt[p]=1;t[p]=0;
}
void add(ll L,ll R,ll l,ll r,ll p,ll x)
{
if (L<=l&&r<=R){t[p]=(t[p]+x)%mod;num[p]=(num[p]+(r-l+1)*x)%mod;return;}
pd(p,l,r);
ll mid=(l+r)>>1;
if (L<=mid)add(L,R,l,mid,p<<1,x);
if (R>=mid+1) add(L,R,mid+1,r,p<<1|1,x);
num[p]=(num[p<<1]+num[p<<1|1])%mod;
}
void mc(ll L, ll R, ll l, ll r, ll p, ll x)
{
if (L<=l&&r<=R){t[p]=t[p]*x%mod;mt[p]=mt[p]*x%mod;num[p]=num[p]*x%mod;return;}
pd(p,l,r);
ll mid=(l+r)>>1;
if(L<=mid)mc(L,R,l,mid,p<<1,x);
if(R>=mid+1)mc(L,R,mid+1,r,p<<1|1,x);
num[p]=(num[p<<1]+num[p<<1|1])%mod;
}
ll Q(ll L,ll R, ll l, ll r, ll p)
{
if (L<=l&&r<=R){return num[p]%mod;}
pd(p,l,r);
ll ans=0,mid=(l+r)>>1;
if(L<=mid)ans+=Q(L,R,l,mid,p<<1);
if(R>=mid+1)ans+=Q(L,R,mid+1,r,p<<1|1);
return ans%mod;
}
int main()
{
ll n, m;
cin>>n>>mod;
for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
cin>>m;
build(1,1,n);
for (ll i=1,type,l,r,x;i<=m;i++)
{
scanf("%lld", &type);
if(type==1){scanf("%lld%lld%lld", &l,&r,&x); mc(l, r,1,n,1,x);}
else if(type==2){scanf("%lld%lld%lld",&l,&r,&x);add(l,r,1,n,1,x);}
else{scanf("%lld%lld", &l, &r);printf("%lld\n",Q(l,r,1,n,1)%mod);}
}
return 0;
}

AcWing 1277. 维护序列的更多相关文章

  1. BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 5504  Solved: 1937[Submit ...

  2. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  3. bzoj 维护序列seq(双标记线段树)

    Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 4184  Solved: 1518[Submit][Status][Discus ...

  4. BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )

    线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...

  5. 1798: [Ahoi2009]Seq 维护序列seq

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 2930  Solved: 1087[Submit ...

  6. BZOJ_1798_[AHOI2009]维护序列_线段树

    BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...

  7. Letters Removing CodeForces - 899F (线段树维护序列)

    大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...

  8. bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 7773  Solved: 2792[Submit ...

  9. bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...

随机推荐

  1. 048.Python前端css

    一 CSS介绍 1.1  CSS语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. selector { property: value; property: value; prop ...

  2. 最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析

    最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析 最小生成树,老生常谈了,生活中也总会有各种各样的问题,在这里,我来带你一起分析一下这个算法的思路与实现的方式吧~~ 在考研中呢 ...

  3. LNMP环境搭建与配置

    lnmp就是 Linux+nginx + mysql + PHP,把Apache替换为Nginx: 这里我用到的Linux环境为为centos,接下来就分步骤来一步步安装及测试. 一.安装php 参考 ...

  4. 如何让Android 支持HEIF 图片解码和加载(免费的方法)

    字节跳动火山引擎ImageX提供了一种能力,可以支持客户端android 直接解码HEIF 和HEIC图片,经过测试发现,可以免费使用: 一.阅前准备 HEIF图片格式是什么? 高效率图像格式(Hig ...

  5. 3层-CNN卷积神经网络预测MNIST数字

    3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...

  6. RGB-D相机视觉SLAM

    RGB-D相机视觉SLAM Dense Visual SLAM for RGB-D Cameras 开源代码地址:  vision.in.tum.de/data/software/dvo 摘要 本文提 ...

  7. 怎样训练YOLOv3

    怎样训练YOLOv3 Training YOLOv3 : Deep Learning based Custom Object Detector 本文将在一些公开的雪人图片和视频上分享训练过程.有助于训 ...

  8. H.265 HD 和H.265 4K Video Encoder IP Core

    H.265 HD 和H.265 4K Video Encoder IP Core H.265 HD Video Encoder IP Core(H.265 HD Video/Audio Encoder ...

  9. python小知识,sort和serted的区别

    列表对象sort()方法和内置sorted()函数的作用基本相同,但,不同的是sort会改变原有列表的顺序,而sorted不会 具体示例如下: """ create:20 ...

  10. 重新整理 .net core 实践篇—————日志系统之结构化[十八]

    前言 什么是结构化呢? 结构化,就是将原本没有规律的东西进行有规律话. 就比如我们学习数据结构,需要学习排序然后又要学习查询,说白了这就是一套,没有排序,谈如何查询是没有意义的,因为查询算法就是根据某 ...