题目链接

暴力数据结构之线段树$qwq$

裸题直接敲板子

忘了啥时候写的了$qwq$

直接上代码吧

/**************************************************************
Problem: 1798
User: zhangheran
Language: C++
Result: Accepted
Time:6372 ms
Memory:10688 kb
****************************************************************/ #include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
int m;
long long mod;
struct lt
{
long long val[];
long long lazy[];
long long lazzy[];
inline void update(int p,int l,int r)
{
val[p]*=lazzy[p];
val[p]%=mod;
val[p]+=lazy[p]*(r-l);
val[p]%=mod;
return;
}
inline void pushdown(int p,int l,int r)
{
update(p,l,r);
if(r-l>)
{
lazy[*p]*=lazzy[p];
lazy[*p]+=lazy[p];
lazy[*p]%=mod;
lazzy[*p]*=lazzy[p];
lazzy[*p]%=mod;
lazy[*p+]*=lazzy[p];
lazy[*p+]+=lazy[p];
lazy[*p+]%=mod;
lazzy[*p+]*=lazzy[p];
lazzy[*p+]%=mod;
}lazy[p]=;
lazzy[p]=;
return;
}
ll build(int p,int l,int r)
{
lazzy[p]=;
if(r-l==)
{
scanf("%lld",&val[p]);
val[p]%=mod;
return val[p];
}
int mid=(l+r)/;
if(mid>l)val[p]+=build(*p,l,mid);
if(mid<r)val[p]+=build(*p+,mid,r);
val[p]%=mod;
return val[p];
}
void setplus(int p,int l,int r,int dl,int dr,long long plus)
{
if(lazy[p]!=||lazzy[p]!=) pushdown(p,l,r);
if(l==dl&&r==dr)
{
lazy[p]+=plus;
lazy[p]%=mod;
pushdown(p,l,r);
return;
}
int mid=(l+r)/;
if(mid>dl) setplus(*p,l,mid,dl,min(mid,dr),plus);
else pushdown(*p,l,mid);
if(mid<dr) setplus(*p+,mid,r,max(mid,dl),dr,plus);
else pushdown(*p+,mid,r);
val[p]=(val[*p]+val[*p+])%mod;
return;
}
void setmult(int p,int l,int r,int dl,int dr,long long mult)
{
if(lazzy[p]!=||lazy[p]!=)pushdown(p,l,r);
if(l==dl&&r==dr)
{
lazy[p]*=mult;
lazzy[p]*=mult;
lazy[p]%=mod;
lazzy[p]%=mod;
pushdown(p,l,r);
return;
}
int mid=(l+r)/;
if(mid>dl) setmult(*p,l,mid,dl,min(mid,dr),mult);
else pushdown(*p,l,mid);
if(mid<dr)setmult(*p+,mid,r,max(mid,dl),dr,mult);
else pushdown(*p+,mid,r);
val[p]=(val[*p]+val[*p+])%mod;
return;
}
ll sum(int p,int l,int r,int dl,int dr)
{
if(lazy[p]!=||lazzy[p]!=) pushdown(p,l,r);
if(l==dl&&r==dr) return val[p];
int mid=(l+r)/;
ll res=;
if(mid>dl) res+=sum(*p,l,mid,dl,min(mid,dr));
if(mid<dr) res+=sum(*p+,mid,r,max(mid,dl),dr);
res%=mod;
return res;
}
}lt;
int main()
{
scanf("%d%d",&n,&mod);
lt.build(,,n);scanf("%d",&m);
for(int i=;i<=m;i++)
{
int opt,u,v;
scanf("%d%d%d",&opt,&u,&v);
if(opt==)
{
int t;
scanf("%d",&t);
lt.setmult(,,n,u-,v,t);
}
else if(opt==)
{
int t;
scanf("%d",&t);
lt.setplus(,,n,u-,v,t);
}
else if(opt==)
printf("%lld\n",lt.sum(,,n,u-,v));
}
return ;
}

bzoj1798维护序列的更多相关文章

  1. BZOJ1798 维护序列seq

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

  2. 【双标记线段树】bzoj1798维护序列seq

    一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...

  3. bzoj1798 维护序列

    Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...

  4. p2023&bzoj1798 维护序列

    传送门(洛谷) 传送门(bzoj) 题目 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全 ...

  5. BZOJ-1798 维护序列

    线段树.支持区间加.区间乘.区间查询和. 标记下移还有取模要注意. var n,p,q,i,s,t:longint; a:int64; num,n1,n2,n3:array[0..500000] of ...

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

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

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

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

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

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

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

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

随机推荐

  1. 关于性能测试中LR的pacing time设置的相关实验

    最近项目中遇到相关性能测试不同方法产生的争议,我这就这个问题在测试环境做了个实验,得出一些指标数据间的有趣关系,供大家讨论学习: 预备知识点: 业界有个TPS ,ART和实际并发量三者间的模拟换算公式 ...

  2. Mongo实战之数据空洞的最佳实践

    问题背景: 某天,开发部的同事跑过来反映: mongodb数据文件太大,快把磁盘撑爆了!其中某个db占用最大(运营环境这个db的数据量其实很小) 分析: 开发环境有大量测试的增/删/改操作,而由于Mo ...

  3. PHP下的手机号码效验

    手机号是否合法有效,基本都是用正则匹配的,所以正则表达式是关键,可以用到java.c#等语言里. /** * 验证手机号是否合法 * * @param string $mobile * 验证的手机号 ...

  4. Jenkins+maven+SVN构建java项目中遇到的问题及解决

    [ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a g ...

  5. libevent源码深度剖析九

    libevent源码深度剖析九 ——集成定时器事件 张亮 现在再来详细分析libevent中I/O事件和Timer事件的集成,与Signal相比,Timer事件的集成会直观和简单很多.Libevent ...

  6. A Recipe for Training Neural Networks [中文翻译, part 1]

    最近拜读大神Karpathy的经验之谈 A Recipe for Training Neural Networks  https://karpathy.github.io/2019/04/25/rec ...

  7. Docker学习笔记_网上资源参考

    Docker学习,网上资源参考 1.菜鸟教程:                                                        http://www.runoob.com ...

  8. jQuery基础教程-第8章-002Adding jQuery object methods

    一.Object method context 1.We have seen that adding global functions requires extending the jQuery ob ...

  9. Web网站的几个QPS

    评价一个网站的"大小",处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的.但对于并发来说,争议非常之多,这里就从一个技术的角度开始,谈 ...

  10. Python 之 文件处理

    文件操作: 文件路径:d:\文件名.txt 编码方式:utf-8.gbk 操作方式:只读.只写.追加.读写.写读... 只读:r    或     rb #相对路径 f=open("文件名& ...