[线段树]Luogu P3373 【模板】线段树 2
#include<cstdio>
#include<cstring>
#include<algorithm>
#define R register
#define llt long long int
#define N 100000
using namespace std;
inline void read(llt& x){
char temp=getchar();bool u=0;
for(x=0;temp<'0'||temp>'9';u=temp=='-',temp=getchar());
for(;temp>='0'&&temp<='9';x=x*10+temp-'0',temp=getchar());
if(u)x=-x;
return ;
}
llt n,m,p;
llt A[N];
llt val[N<<2];
llt add[N<<2];
llt mul[N<<2];
inline llt add_(R llt x,R llt y){
return (x+y)%p;
}
inline llt mul_(R llt x,R llt y){
return (x*y)%p;
}
void init(llt k=1,llt l=1,llt r=n){
add[k]=0;
mul[k]=1;
if(l==r){
val[k]=A[l]%p;
return ;
}
R llt mid=(l+r)>>1;
init(k<<1,l,mid);
init(k<<1|1,mid+1,r);
val[k]=add_(val[k<<1],val[k<<1|1]);
return ;
}
void pushdown(llt &k,llt &l,llt &r,llt &mid){
R llt ls=k<<1,rs=k<<1|1;
val[ls]=mul_(val[ls],mul[k]);
val[rs]=mul_(val[rs],mul[k]);
val[ls]=add_(val[ls],add[k]*(mid-l+1));
val[rs]=add_(val[rs],add[k]*(r-mid));
mul[ls]=mul_(mul[ls],mul[k]);
mul[rs]=mul_(mul[rs],mul[k]);
add[ls]=mul_(add[ls],mul[k]);
add[rs]=mul_(add[rs],mul[k]);
add[ls]=add_(add[ls],add[k]);
add[rs]=add_(add[rs],add[k]);
add[k]=0;
mul[k]=1;
return ;
}
void ch1(llt &x,llt &y,llt &v,llt k=1,llt l=1,llt r=n){
if(l>=x&&y>=r){
mul[k]=mul_(mul[k],v);
add[k]=mul_(add[k],v);
val[k]=mul_(val[k],v);
return ;
}
R llt mid=(l+r)>>1;
pushdown(k,l,r,mid);
if(x<=mid)ch1(x,y,v,k<<1,l,mid);
if(mid<y)ch1(x,y,v,k<<1|1,mid+1,r);
val[k]=add_(val[k<<1],val[k<<1|1]);
return ;
}
void ch2(llt &x,llt &y,llt &v,llt k=1,llt l=1,llt r=n){
if(l>=x&&y>=r){
add[k]=add_(add[k],v);
val[k]=add_(val[k],mul_(v,r-l+1));
return ;
}
R llt mid=(l+r)>>1;
pushdown(k,l,r,mid);
if(x<=mid)ch2(x,y,v,k<<1,l,mid);
if(mid<y)ch2(x,y,v,k<<1|1,mid+1,r);
val[k]=add_(val[k<<1],val[k<<1|1]);
return ;
}
llt get(llt &x,llt &y,llt k=1,llt l=1,llt r=n){
if(l>=x&&y>=r)return val[k];
R llt mid=(l+r)>>1;
R llt res=0;
pushdown(k,l,r,mid);
if(x<=mid)res=add_(res,get(x,y,k<<1,l,mid));
if(mid<y)res=add_(res,get(x,y,k<<1|1,mid+1,r));
return res%p;
}
int main(){
R llt i,tmp,x,y;
read(n);
read(m);
read(p);
for(i=1;i<=n;i++)
read(A[i]);
init();
for(i=1;i<=m;i++){
read(tmp);
read(x);
read(y);
switch(tmp){
case 1:{
read(tmp);
ch1(x,y,tmp);
break;
}
case 2:{
read(tmp);
ch2(x,y,tmp);
break;
}
case 3:{
printf("%lld\n",get(x,y));
break;
}
}
}
return 0;
}
[线段树]Luogu P3373 【模板】线段树 2的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- HDU 1166 敌兵布阵(线段树/树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)
luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...
- hdu 1754 I Hate It (模板线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others) M ...
- Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树)
Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树) Description 一棵树上有n个节点,编号分别 ...
- 【线段树】【P3372】模板-线段树
百度百科 Definition&Solution 线段树是一种log级别的树形结构,可以处理区间修改以及区间查询问题.期望情况下,复杂度为O(nlogn). 核心思想见百度百科,线段树即将每个 ...
- hdu1698(线段树区间替换模板)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- Luogu P3960 列队 线段树
题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...
随机推荐
- Modbus RTU通信协议详解以及与Modbus TCP通信协议之间的区别和联系
Modbus通信协议由Modicon公司(现已经为施耐德公司并购,成为其旗下的子品牌)于1979年发明的,是全球最早用于工业现场的总线规约.由于其免费公开发行,使用该协议的厂家无需缴纳任何费用,Mod ...
- C# WebClient,HttpClient,WebRequest
static void WebClientDemo() { string url = "https://www.cnblogs.com/Fred1987/p/11843418.html&qu ...
- Socket,Tcp,Http的关联
下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: TCP/IP 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议 ...
- git 配置远程仓库(同一个邮箱注册多个gitlab仓库)
之前配置的全局用户和邮箱,如果是多个注册账户就不能设置为全局账户 git config --global user.name "username" git config --glo ...
- SpringCloud服务调用源码解析汇总
相信我,你会收藏这篇文章的,本篇文章涉及Ribbon.Hystrix.Feign三个组件的源码解析 Ribbon架构剖析 这篇文章介绍了Ribbon的基础架构,也就是下图涉及到的6大组件: Ribbo ...
- sharepointOnline的外接应用创建
#CODE STARTS HERE $programFiles = [environment]::getfolderpath("programfiles") add-type -P ...
- Qt窗口退出与事件循环退出的问题
我在Qt主程序中开启一个线程,线程中使用信号-槽来产生QMainWindow(GUI),main函数代码如下:int main(int argc, char *argv[]){ QApplicatio ...
- iOS9新框架—Watch Connectivity(详情:http://ios.itcast.cn/subject/ios9/index.shtml )
1背景. Watch Connectivity--专为用来实现Watch与配对iPhone上的文件和数据的来回传输而生. 2.iOS8与iOS9发送数据的对比. 我们知道数据交换在iOS8中就有,我们 ...
- 解决vue中百度地图覆盖物引用本地图片问题
这次的主要目的是在百度地图中引用自定义的覆盖物,路径是再asset/images/文件夹下,直接引用出错.需要先导入再引用. 在<script></script>代码中增加如下 ...
- itest(爱测试) 3.3.5 发布,开源敏捷测试管理 & BUG 跟踪管理软件
v3.3.5 下载地址 :itest下载 itest 简介:查看简介 V3.3.5 有 6个功能增强,2个BUG修复 ,详情如下所述. 用户反馈并强烈要求增强的功能实现: 1: 测试用例管理可线 ...