【bzoj1798】【AHOI2009】维护序列
练一下线段树模板,区间乘法。
#include<bits/stdc++.h>
#define lson (o<<1)
#define rson (o<<1|1)
const int N=;
using namespace std;
typedef long long ll;
ll n,m,yql;
ll a[N];
struct Segment_Tree{
ll sumv[N<<],addv[N<<],mulv[N<<];
inline void pushup(int o){sumv[o]=(sumv[lson]+sumv[rson])%yql;}
inline void pushdown(int o,int l,int r){
if(mulv[o]==&&addv[o]==)return;
int mid=(l+r)>>;
mulv[lson]=mulv[lson]*mulv[o]%yql;
mulv[rson]=mulv[rson]*mulv[o]%yql;
addv[lson]=(addv[lson]*mulv[o]%yql+addv[o])%yql;
addv[rson]=(addv[rson]*mulv[o]%yql+addv[o])%yql;
sumv[lson]=((sumv[lson]*mulv[o])%yql+addv[o]*1LL*(mid-l+)%yql)%yql;
sumv[rson]=((sumv[rson]*mulv[o])%yql+addv[o]*1LL*(r-mid)%yql)%yql;
mulv[o]=;addv[o]=;
}
inline void build(int o,int l,int r){
mulv[o]=;addv[o]=;sumv[o]=;
if(l==r){sumv[o]=a[l];return;}
int mid=(l+r)>>;
build(lson,l,mid);build(rson,mid+,r);
pushup(o);
}
inline void mul(int o,int l,int r,int ql,int qr,int v){
if(ql<=l&&r<=qr){
mulv[o]=mulv[o]*1LL*v%yql;
addv[o]=addv[o]*1LL*v%yql;
sumv[o]=sumv[o]*1LL*v%yql;
return;
}
pushdown(o,l,r);
int mid=(l+r)>>;
if(ql<=mid)mul(lson,l,mid,ql,qr,v);
if(qr>mid)mul(rson,mid+,r,ql,qr,v);
pushup(o);
}
inline void add(int o,int l,int r,int ql,int qr,int v){
if(ql<=l&&r<=qr){
addv[o]=(addv[o]+1LL*v)%yql;
sumv[o]=(sumv[o]+1LL*(r-l+)*v%yql)%yql;
return;
}
pushdown(o,l,r);
int mid=(l+r)>>;
if(ql<=mid)add(lson,l,mid,ql,qr,v);
if(qr>mid)add(rson,mid+,r,ql,qr,v);
pushup(o);
}
inline ll querysum(int o,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr)return sumv[o];
int mid=(l+r)>>;ll ans=;
pushdown(o,l,r);
if(ql<=mid)ans+=querysum(lson,l,mid,ql,qr),ans%=yql;
if(qr>mid)ans+=querysum(rson,mid+,r,ql,qr),ans%=yql;
return ans;
}
}T;
inline ll read(){
ll f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();yql=read();
for(int i=;i<=n;i++)a[i]=read();
T.build(,,n);
m=read();
while(m--){
ll opt=read();
if(opt==){int l=read(),r=read(),x=read();T.mul(,,n,l,r,x);}
if(opt==){int l=read(),r=read(),x=read();T.add(,,n,l,r,x);}
if(opt==){int l=read(),r=read();printf("%lld\n",T.querysum(,,n,l,r));}
}
}
【bzoj1798】【AHOI2009】维护序列的更多相关文章
- bzoj1798 [Ahoi2009]维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- 【线段树】Bzoj1798 [AHOI2009] 维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- BZOJ1798[Ahoi2009]维护序列——线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- BZOJ_1798_[AHOI2009]维护序列_线段树
BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...
- [Luogu 2023] AHOI2009 维护序列
[Luogu 2023] AHOI2009 维护序列 恕我冒昧这和线段树模板二有个琴梨区别? #include <cstdio> int n,m; long long p; class S ...
- [洛谷P2023] [AHOI2009]维护序列
洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...
- 洛谷 2023 [AHOI2009]维护序列
洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...
- 洛谷 P2023 [AHOI2009]维护序列
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷 P2023 [AHOI2009]维护序列 题解
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...
随机推荐
- BZOJ4821 SDOI2017相关分析(线段树)
纯粹的码农题.维护x的和.y的和.xy的和.x2的和即可.可能会炸long long. #include<iostream> #include<cstdio> #include ...
- 在Linux上编译TCMalloc
TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多.TCMalloc是goog ...
- linq的decimal类型保存到数据库只保存到小数点后两位的问题
今天的一个decimal类型保存到数据的问题困扰了我很长时间,最后就是一个小小的设置问题解决······坑······深坑···· 话不多说,直接说问题,在说答案: 问题:linq当采用EF的DbCo ...
- [洛谷P4171][JSOI2010]满汉全席
题目大意:有$n$个点,每个点可以选或不选,有$m$组约束,形如$a,u,b,v$,表示$u=a,v=b$中至少要满足一个条件,问是否存在一组解,多组询问 题解:$2-SAT$,感觉是板子题呀,最后判 ...
- 2018牛客多校第五场 E.room
题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...
- bzoj2431: [HAOI2009]逆序对数列(DP)
f[i][j]前i个数有j个逆序对的数量 f[i][j]=sigma(f[i-1][j-k]){1<=k<=i} 维护一个前缀和即可 #include<iostream> #i ...
- Android源码4.4.4_r1下载和编译
系统:ubuntu 16.04.2 TLS 1.源码下载: sudo apt-get install curl curl https://storage.googleapis.com/git-repo ...
- 基于DCT系数的实时监控中运动目标检测
本文的主要内容来自2009 Advanced Video and Signal Based Surveillance会议的一篇论文“Real-Time Moving Object Detection ...
- ACE线程管理机制-并发控制(3)
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/04/581854.html ACE Condition类属 ACE Condition类属(条 ...
- HDU 3277 最大流+二分
Marriage Match III Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...