AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)
我是不会说这个题很坑的。。
改了一晚上。。。
// by SiriusRen
#include <cstdio>
#define N 150000
#define LSON l,mid,lson
#define RSON mid+1,r,rson
#define LL long long
using namespace std;
LL n,m,mod,xx,yy,zz,jy;
LL mul[N*4],add[N*4],sum[N*4];
int get(){
int x=0;char p=getchar();
while(p<'0'||p>'9')p=getchar();
while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();
return x;
}
void build(int l,int r,int pos){
mul[pos]=1;
if(l==r){sum[pos]=get();return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
build(LSON);build(RSON);
sum[pos]=(sum[lson]+sum[rson])%mod;
}
void push_down(int pos,int lson,int rson,int num){
mul[lson]=(mul[pos]*mul[lson])%mod;
mul[rson]=(mul[pos]*mul[rson])%mod;
add[lson]=(add[lson]*mul[pos]+add[pos])%mod;
add[rson]=(add[rson]*mul[pos]+add[pos])%mod;
sum[lson]=(sum[lson]*mul[pos]+add[pos]*(num-(num>>1)))%mod;
sum[rson]=(sum[rson]*mul[pos]+add[pos]*(num>>1))%mod;
mul[pos]=1;add[pos]=0;
}
void update(int l,int r,int pos){
if(l>=xx&&r<=yy){
if(jy==1){
mul[pos]=(mul[pos]*zz)%mod;
add[pos]=(add[pos]*zz)%mod;
sum[pos]=(sum[pos]*zz)%mod;
}
else{
add[pos]=(add[pos]+zz)%mod;
sum[pos]=(sum[pos]+(r-l+1)*zz)%mod;
}
return;
}
int mid=(l+r)/2,lson=pos<<1,rson=pos<<1|1;
if(mul[pos]!=1||add[pos])
push_down(pos,lson,rson,r-l+1);
if(mid>=xx)update(LSON);
if(mid<yy)update(RSON);
sum[pos]=(sum[lson]+sum[rson])%mod;
}
int query(int l,int r,int pos){
int mid=(l+r)/2,lson=pos<<1,rson=pos<<1|1;
if(l>=xx&&r<=yy){
return sum[pos];
}
if(mul[pos]!=1||add[pos])
push_down(pos,lson,rson,r-l+1);
if(mid>=yy)return query(LSON);
else if(mid<xx)return query(RSON);
else return (query(LSON)+query(RSON))%mod;
}
int main(){
n=get();mod=get();
build(1,n,1);
m=get();
while(m--){
jy=get();xx=get();yy=get();
if(jy!=3) zz=get(),update(1,n,1);
else printf("%d\n",query(1,n,1));
}
}
AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)的更多相关文章
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- 【bzoj1798】[Ahoi2009]Seq 维护序列seq 线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...
- Bzoj 1798: [Ahoi2009]Seq 维护序列seq(线段树区间操作)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小可 ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 7773 Solved: 2792[Submit ...
- 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq 线段树多标记(区间加+区间乘)
[题意]给定序列,支持区间加和区间乘,查询区间和取模.n<=10^5. [算法]线段树 [题解]线段树多重标记要考虑标记与标记之间的相互影响. 对于sum*b+a,+c直接加上即可. *c后就是 ...
- bzoj 1798 维护序列seq 线段树
裸的线段树,注意标签下放就行了 多么痛的领悟,一定要开int64 /************************************************************** Pro ...
- bzoj 1798 [Ahoi2009]Seq 维护序列seq ——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1798 先乘后加,就可给加法标记乘上乘法标记. 注意可能有 *0 的操作,所以 pshd 时不 ...
随机推荐
- 如何修改yii2.0用户登录使用的user表为其它的表
这只是自己练习的一个记录而已. 因为某种原因,不想用yii自带的user表,想用自己建的admin数据库表,修改如下: 1. 参考高级模板里里的common\models\User 修改 Admi ...
- canvas画弧线
arc(x, y, radius, startRad, endRad, [anticlockwise]) 在Canvas画布上绘制以坐标点(x,y)为圆心.半么为radius的圆上的一段弧线.这段弧线 ...
- 6——Z 字形变换(ZigZag Conversion)
题目描述将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I RE T O E S ...
- Oracle 解决表死锁
select 'alter system kill session ''' || SID || ',' || SERIAL# || ''';' from ( select distinct a.sid ...
- kissui.scrollanim页面滚动动画库插件
简介 kissui.scrollanim是一款实用的纯JS和CSS3页面滚动动画库插件.通过该插件可以使元素进入浏览器视口的时候,展示指定的CSS3动画效果. 下载地址及演示 在线演示 在线下载 安装 ...
- java IO框架分析
jave.io框架 2010-11-10 22:18:34| 分类: 默认分类|举报|字号 订阅 可从IO的类层次,IO框架的设计模式来论述. 总体来说,IO可以分为字节流和字符流,不同在于 ...
- 【ACM】nyoj_103_A+BII_201307291022
A+B Problem II时间限制:3000 ms | 内存限制:65535 KB 难度:3描述 I have a very simple problem for you. Given two ...
- mongodb--reduce并行处理框架
reduce 命令 db.runCommand( { mapReduce: <collection>, map: <function>, reduce: <functio ...
- 项目 cmdb(一)
Django之ModelForm组件 ModelForm a. class Meta: model, # 对应Mode ...
- [React] Forward a DOM reference to another Component using forwardRef in React 16.3
The function forwardRef allows us to extract a ref and pass it to its descendants. This is a powerfu ...