题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1798

这题还4A...

注意:cnt 从1开始;各种模 p;乘法标记初始值是 1;可能乘 0。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
int const xn=1e5+;
int n,a[xn],cnt,ls[xn<<],rs[xn<<],sum[xn<<],lzy[xn<<],ml[xn<<],p;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
int upt(int x){while(x>=p)x-=p; while(x<)x+=p; return x;}
void build(int x,int l,int r)
{
ml[x]=;//
if(l==r){sum[x]=a[l]; return;}
ls[x]=++cnt; rs[x]=++cnt;
build(ls[x],l,mid); build(rs[x],mid+,r);
sum[x]=upt(sum[ls[x]]+sum[rs[x]]);
}
void turn(int x,int c){sum[x]=(ll)sum[x]*c%p; lzy[x]=(ll)lzy[x]*c%p; ml[x]=(ll)ml[x]*c%p;}
void pushdown(int x,int l,int r)
{
if(ml[x]!=)//
{
int v=ml[x]; ml[x]=;//
turn(ls[x],v); turn(rs[x],v);
}
if(lzy[x])
{
int v=lzy[x]; lzy[x]=;
sum[ls[x]]=(sum[ls[x]]+(ll)(mid-l+)*v)%p; lzy[ls[x]]=upt(lzy[ls[x]]+v);
sum[rs[x]]=(sum[rs[x]]+(ll)(r-mid)*v)%p; lzy[rs[x]]=upt(lzy[rs[x]]+v);
}
}
void mul(int x,int l,int r,int L,int R,int c)
{
if(l>=L&&r<=R){turn(x,c); return;}
pushdown(x,l,r);
if(mid>=L)mul(ls[x],l,mid,L,R,c);
if(mid<R)mul(rs[x],mid+,r,L,R,c);
sum[x]=upt(sum[ls[x]]+sum[rs[x]]);
}
void add(int x,int l,int r,int L,int R,int c)
{
if(l>=L&&r<=R){sum[x]=(sum[x]+(ll)(r-l+)*c)%p; lzy[x]=upt(lzy[x]+c); return;}
pushdown(x,l,r);
if(mid>=L)add(ls[x],l,mid,L,R,c);
if(mid<R)add(rs[x],mid+,r,L,R,c);
sum[x]=upt(sum[ls[x]]+sum[rs[x]]);
}
int query(int x,int l,int r,int L,int R)
{
if(l>=L&&r<=R)return sum[x];
pushdown(x,l,r); int ret=;
if(mid>=L)ret=upt(ret+query(ls[x],l,mid,L,R));
if(mid<R)ret=upt(ret+query(rs[x],mid+,r,L,R));
return ret;
}
int main()
{
n=rd(); p=rd();
for(int i=;i<=n;i++)a[i]=rd()%p;
build(++cnt,,n);
int m=rd();
for(int i=,tp,l,r,c;i<=m;i++)
{
tp=rd(); l=rd(); r=rd();
if(tp==)c=rd()%p,mul(,,n,l,r,c);
if(tp==)c=rd()%p,add(,,n,l,r,c);
if(tp==)printf("%d\n",query(,,n,l,r));
}
return ;
}

最新文章

  1. JAVA学习笔记(一):一个小爬虫的例子
  2. 使用Notepad++代替笨拙的Arduino IDE
  3. python中List操作
  4. .NET托管代码和非托管代码
  5. Yii 通过composer 安装的方法
  6. &amp;&amp;与&amp;
  7. CSS样式鼠标点击与经过的效果一样
  8. 软件源(Software Sources)
  9. java学习笔记07--日期操作类
  10. workerman简单例子
  11. 定时且周期性的任务研究II--ScheduledThreadPoolExecutor
  12. 简洁、轻量的前端UI框架 - Hbook
  13. scrapy代理的设置
  14. Intellij idea: java.lang.ClassNotFoundException:javax.el.ELResolver异常解决办法
  15. redis与python交互
  16. message.go
  17. 使用FileUpload实现Servlet的文件上传
  18. 001_python实现数据分析
  19. ORACLE中 大量数据插入表 SQL
  20. SpringBoot 2.0集成spring-data-elasticsearch

热门文章

  1. 阿里巴巴为什么主推HSF?比Dubbo有哪些优势?
  2. nginx list directory
  3. 自己定义struts2中action类型转换器
  4. C++编译错误 2001 1120
  5. vim 查找整个工程
  6. Java泛型 类型变量的限定
  7. 【Spark Core】TaskScheduler源代码与任务提交原理浅析2
  8. 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现
  9. 牛顿迭代法(Newton&amp;#39;s Method)
  10. maven的坑2