bzoj1798维护序列
暴力数据结构之线段树$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维护序列的更多相关文章
- BZOJ1798 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 8058 Solved: 2964[Submit ...
- 【双标记线段树】bzoj1798维护序列seq
一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...
- bzoj1798 维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- p2023&bzoj1798 维护序列
传送门(洛谷) 传送门(bzoj) 题目 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全 ...
- BZOJ-1798 维护序列
线段树.支持区间加.区间乘.区间查询和. 标记下移还有取模要注意. var n,p,q,i,s,t:longint; a:int64; num,n1,n2,n3:array[0..500000] of ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- bzoj 维护序列seq(双标记线段树)
Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 4184 Solved: 1518[Submit][Status][Discus ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
随机推荐
- nginx反向代理负载均衡初次配置
反向代理,我个人理解是通过一台反向代理服务器,把客户端的把有请求按照一定的规则分发给后台的服务器.nginx作反向代理服务器的虚拟机配置如下: upstream itest { #正常情况下应该作如下 ...
- leetcode893
class Solution { public: int numSpecialEquivGroups(vector<string>& A) { set<string> ...
- delphi 原生 ADODB.recordset
ADODB.recordset ..\source\rtl\win\Winapi.ADOInt.pas..\17.0\OCX\Servers\ADODB2010.pasCLASS_Recordset: ...
- wordpress Bloginfo()函数
bloinfo($show); ‘name‘ – 显示在 设置 > 常规 中设置的“站点标题”. 该数据是从 wp_options 这个数据表中检索到的 "blogname" ...
- c++策略模式(Strategy Method)
别人的博客再讲策略模式时都会讲三国,策略类就是赵云的锦囊,锦囊里装着若干妙计.在打仗时想要用什么妙计,直接从锦囊里去取. 锦囊类: class context { public: context(IS ...
- ECShop研究:去掉标题中的Powered by ECShop和meta的<meta name="Generator" content="ECSHOP v2.7.3" />
本文以ECSHOP v2.7.3为说明,其他版本可能有所不同. 标题中的Powered by ECShop去除方法: 打开includes/lib_main.php文件: 找到156行:$page_t ...
- Hibernate和Mybatis区别 详细 有用
1.开发上手难度 hibernate的真正掌握(封装的功能和特性非常多)要比Mybatis来得难. 在真正产品级应用上要用Hibernate,不仅对开发人员的要求高,hibernate往往还不适合(多 ...
- cout/cin
转载来源:http://baike.baidu.com/link?url=NiNaSw0pF7RqFO8u0jx8KWk9yOfFFYy24xCJlQ6_qMcw5_WBzRKOqsO6tfvvJbZ ...
- Hyperledger Fabric Ordering Service过程
排序服务在超级账本 Fabric 网络中起到十分核心的作用.所有交易在发送给 Committer 进行验证接受之前,需要先经过排序服务进行全局排序. 在目前架构中,排序服务的功能被抽取出来,作为单独的 ...
- myeclipse自动化提示
jsp自动提示:1.快捷键提示代码 window-->Preferences的General-->Keys下修改Content Assist的快捷键为Alt+/,这样就可以通过快捷键得到提 ...