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.. ---------------------------------- ...
随机推荐
- Python 中的 is 和 == 编码和解码
一 is 与 == 区别 == 比较 比较的是值 例如: a = 'alex' b = 'alex' print(a == b) #True a = 10 ...
- Vue 简单的总结三
一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装按成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...
- JAXB 专题二(BSP接口实战)
BSP下单接口 1.xml格式如下 <?xml version="1.0" encoding="utf-8"?> <Request servi ...
- Mycat实战之新增基于hash分片的表
1. 修改rule.xml hash分片规则 主要改两个地方: vi rule.xml 分片数量,这里改为3 对应 三个库 hash规则 默认是id列 这里为 PROVINCE 2. reload 加 ...
- JPA 注解详解
@Entity --声明为一个实体类bean @Table (name= "promotion_info" ) --为实体bean映射指定表(表名="promotion_ ...
- ajax 两者有什么不同
$.ajax({ type:"POST", url:url, //dataType:"json" ...
- oracle语言基础
一.语言分类 1.DML(Data Manipulation Language,数据操作语言):用于对数据的操作. DML包括:(1)SELECT:查询数据 select * from temp; ...
- saltstack系列(五)——zmq扩展(一)
问题 假设我们的一个客户端既有pull又有sub,他们两个都需要接收消息,该如何协调呢,毕竟,当一个socket要收消息的时候,函数recv是阻塞的,所以,我们第一个思路是不让它阻塞? 实例代码: # ...
- java基础之io流总结二:File类基本应用
File类的概述: File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类保存文件或目录的各种元数据信息,包括文件名.文件长度.最后修改时间.是否可读 ...
- java基础之JDBC二:原生代码基础应用
JDBC的基础应用CURD: 增删改 public void noQuery() { Connection conn = null; Statement stat = null; try { //注册 ...