【BZOJ】1798: [Ahoi2009]Seq 维护序列seq
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798
大概就是维护两个标记的线段树模板题。
设定优先级,先乘后加(只是相对的),$pushdown$的时候乘法标记直接乘,加法标记先乘上父亲的乘法标记再加上父亲的加法标记。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<vector>
- #include<cstdlib>
- #include<cmath>
- #include<cstring>
- using namespace std;
- #define maxn 1001000
- #define llg long long
- #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
- llg n,m,md;
- struct SEGMENT_TREE
- {
- llg val[maxn],addv[maxn],mul[maxn];
- bool bj[maxn];
- void init(){memset(val,,sizeof(val)); memset(mul,,sizeof(mul)); memset(addv,,sizeof(addv)); memset(bj,,sizeof(bj));}
- void build(llg o,llg l,llg r)
- {
- if (l==r)
- {
- addv[o]=,mul[o]=;
- scanf("%lld",&val[o]);
- return ;
- }
- llg mid=(l+r)>>,lc=o<<,rc=o<<|;
- build(lc,l,mid);
- build(rc,mid+,r);
- val[o]=val[lc]+val[rc];
- mul[o]=; addv[o]=;
- }
- void pushdown(llg o,llg l,llg r)
- {
- llg lc=o<<,rc=o<<|;
- mul[lc]*=mul[o],mul[lc]%=md;
- mul[rc]*=mul[o],mul[rc]%=md;
- addv[lc]*=mul[o],addv[lc]%=md;
- addv[rc]*=mul[o],addv[rc]%=md;
- addv[lc]+=addv[o],addv[lc]%=md;
- addv[rc]+=addv[o],addv[rc]%=md;
- val[o]=val[o]*mul[o]+addv[o]*(r-l+); val[o]%=md;
- addv[o]=,mul[o]=;
- }
- void add_(llg o,llg l,llg r,llg L,llg R,llg V)
- {
- pushdown(o,l,r);
- if (L>r || R<l) return ;
- if (l>=L && r<=R)
- {
- addv[o]+=V;
- pushdown(o,l,r);
- return ;
- }
- llg mid=(l+r)>>,lc=o<<,rc=o<<|;
- add_(lc,l,mid,L,R,V);
- add_(rc,mid+,r,L,R,V);
- val[o]=val[lc]+val[rc]; val[o]%=md;
- }
- void mul_(llg o,llg l,llg r,llg L,llg R,llg V)
- {
- pushdown(o,l,r);
- if (L>r || R<l) return ;
- if (l>=L && r<=R)
- {
- mul[o]*=V;
- pushdown(o,l,r);
- return ;
- }
- llg mid=(l+r)>>,lc=o<<,rc=o<<|;
- mul_(lc,l,mid,L,R,V);
- mul_(rc,mid+,r,L,R,V);
- val[o]=val[lc]+val[rc]; val[o]%=md;
- }
- llg sum(llg o,llg l,llg r,llg L,llg R)
- {
- pushdown(o,l,r);
- if (L>r || R<l) return ;
- if (l>=L && r<=R)
- {
- return val[o];
- }
- llg mid=(l+r)>>,lc=o<<,rc=o<<|,tot=;
- tot+=sum(lc,l,mid,L,R);
- tot+=sum(rc,mid+,r,L,R);
- val[o]=val[lc]+val[rc]; val[o]%=md;
- return tot%md;
- }
- }tree;
- int main()
- {
- tree.init();
- yyj("a");
- cin>>n>>md;
- tree.build(,,n);
- llg T,type,l,r,v;
- cin>>T;
- while (T--)
- {
- scanf("%lld",&type);
- if (type==)
- {
- scanf("%lld%lld%lld",&l,&r,&v);
- tree.mul_(,,n,l,r,v);
- }
- if (type==)
- {
- scanf("%lld%lld%lld",&l,&r,&v);
- tree.add_(,,n,l,r,v);
- }
- if (type==)
- {
- scanf("%lld%lld",&l,&r);
- printf("%lld\n",tree.sum(,,n,l,r));
- }
- }
- return ;
- }
【BZOJ】1798: [Ahoi2009]Seq 维护序列seq的更多相关文章
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- 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 线段树 区间乘法区间加法 区间求和
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 老师交给小可可一个维护数列的任务,现在小可 ...
- 1798: [Ahoi2009]Seq 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 2930 Solved: 1087[Submit ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq
传送门 写这道题是为了get一个同时传送乘法下标和加法下标的小技巧,线段树模板题.不多说. 标记名字打错无限智力-- //BZOJ 1798 //by Cydiater //2016.9.13 #in ...
- 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq(线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1798 之前写了个快速乘..........................20多s...... 还好 ...
- bzoj 1798 [Ahoi2009]Seq 维护序列seq(线段树+传标)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1798 [题意] 给定一个序列,要求提供区间乘/加,以及区间求和的操作 [思路] 线段树 ...
随机推荐
- Selenium 常用定位对象元素的方法
常见定位对象元素的方法 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方 ...
- GoldenGate 12.3发布
新特性: oracle db1. 支持12.2 oracle db2. 支持微服务架构, 可以使用restful api 管理OGG3. Parallel replicat,性能比integrated ...
- 自动部署war包脚本
war 包所在路径为:/home/wars/ROOT.war tomcat 所在路径为: ①:/home/search-3 ②:/home/search-4 部署单个war到一个tomcat中 #!/ ...
- 基于SecureCRT的测试环境的克隆的linux/vi相关命令
#chmod -R 777*; 参数-R:对当前目录下的所有档案与子目录进行相同的权限 变更(即以递归的方式逐个变更). *:通配符,指的是当前目录下的所有文件及目录. 所有文件及其子目录的文件拥有者 ...
- HTML <canvas> testing with Selenium and OpenCV
from: https://www.linkedin.com/pulse/html-canvas-testing-selenium-opencv-maciej-kusz Since HTML < ...
- Centos环境自写脚本查看使用php或nginx占用内存
在CentOs6.4下,用root权限测试. # cd ~ //进入home目录 # vim .bashrc //编辑文件,把下面代码放入地址 mem () { top -n1 -b | head - ...
- 阿里云centos远程连接mysql
首先在服务器管理控制台设置防火墙规则 添加规则 使用root登录到mysql 添加一个用户名,权限为%的远程连接用户 grant all on *.* to 'yuancheng'@'%' ident ...
- Pycharm小技巧
Pycharm专业版2017.3及以上 Python2.7.x及以上 补全与高亮 在创建python2.7,django1.10的项目时,碰到html代码不补全也不高亮的问题,解决思路如下: # 依次 ...
- oracle No more data to read from socket之ora-07445排查解决
今天下午,原来一个部门的同事找过来,说有个即将上线的环境偶尔会出现 No more data to read from socket错误,版本是oracle 11.2.0.1,如下: 经查,这个问题原 ...
- dubbo环境搭建与tomcat集成、DEMO示例、常见问题(最完整版本、带管理控制台、监控中心、zookeeper)
以windows为例,linux基本相同,开发环境一般linux,个人环境一般windows(如果不开额外vm的话). 示例以dubbo官方自带demo为例子,进行整合和稍加修改测试. 0.dubbo ...