BZOJ1798: [Ahoi2009]Seq 维护序列seq
写这道题是为了get一个同时传送乘法下标和加法下标的小技巧,线段树模板题。不多说。
标记名字打错无限智力--
//BZOJ 1798 //by Cydiater //2016.9.13 #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <map> #include <iomanip> #include <cstdlib> #include <cmath> #include <ctime> using namespace std; #define ll unsigned long long #define up(i,j,n) for(int i=j;i<=n;i++) #define down(i,j,n) for(int i=j;i>=n;i--) #define FILE "seqb" ; const ll oo=0x3f3f3f3f; inline ll read(){ ,f=; ;ch=getchar();} +ch-';ch=getchar();} return x*f; } struct SegTree{ ll v,delta1,delta2,leftt,rightt; }t[MAXN<<]; ll N,mod,M,op,x,y,Delta1,Delta2,a[MAXN]; namespace solution{ inline void downit(int node){ if(t[node].leftt==t[node].rightt)return; ll delta1=t[node].delta1,delta2=t[node].delta2,leftt,rightt; t[node].delta1=;t[node].delta2=; ){ t[node<<].delta1*=delta2;t[node<<].delta1%=mod; t[node<<].delta2*=delta2;t[node<<].delta2%=mod; t[node<<].v*=delta2;t[node<<].delta2%=mod; t[node<<|].delta1*=delta2;t[node<<|].delta1%=mod; t[node<<|].delta2*=delta2;t[node<<|].delta2%=mod; t[node<<|].v*=delta2;t[node<<|].delta2%=mod; } leftt=t[node<<].leftt;rightt=t[node<<].rightt; t[node<<].delta1+=delta1;t[node<<].delta1%=mod; t[node<<].v+=(rightt-leftt+)*delta1;t[node<<].v%=mod; leftt=t[node<<|].leftt;rightt=t[node<<|].rightt; t[node<<|].delta1+=delta1;t[node<<|].delta1%=mod; t[node<<|].v+=(rightt-leftt+)*delta1;t[node<<|].v%=mod; } inline ].v+t[node<<|].v)%mod;} inline void updata(int leftt,int rightt,int root){ downit(root); if(leftt>y||rightt<x) return; if(leftt>=x&&rightt<=y){ if(Delta1){ t[root].delta1+=Delta1; t[root].v+=(rightt-leftt+)*Delta1; t[root].delta1%=mod; t[root].v%=mod; } ){ t[root].delta1*=Delta2;t[root].delta1%=mod; t[root].delta2*=Delta2;t[root].delta2%=mod; t[root].v*=Delta2;t[root].v%=mod; } return; } ; updata(leftt,mid,root<<); updata(mid+,rightt,root<<|); reload(root); } inline ll find(int leftt,int rightt,int root){ downit(root); ; if(leftt>=x&&rightt<=y) return t[root].v; ; )+find(mid+,rightt,root<<|))%mod; } inline void build(int leftt,int rightt,int root){ t[root].delta2=; if(leftt==rightt){ t[root].leftt=t[root].rightt=leftt; t[root].v=a[leftt];t[root].delta1=; return; } t[root].leftt=leftt;t[root].rightt=rightt;t[root].delta1=; ; build(leftt,mid,root<<); build(mid+,rightt,root<<|); reload(root); } void slove(){ N=read();mod=read(); up(i,,N)a[i]=read(); build(,N,); M=read(); while(M--){ op=read();x=read();y=read(); ){ Delta1=;Delta2=read(); updata(,N,); } ){ Delta1=read();Delta2=; updata(,N,); } ){ printf(,N,)); //cout<<find(1,N,1)<<endl; } } } } int main(){ //freopen(FILE".in","r",stdin); //freopen("input.in","r",stdin); //freopen(FILE".out","w",stdout); using namespace solution; slove(); ; }
BZOJ1798: [Ahoi2009]Seq 维护序列seq的更多相关文章
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- 1798: [Ahoi2009]Seq 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 2930 Solved: 1087[Submit ...
- 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 老师交给小可可一个维护数列的任务,现在小可 ...
- BZOJ1798[Ahoi2009]Seq 维护序列seq 题解
题目大意: 有长为N的数列,有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值. ...
- 【bzoj1798】[Ahoi2009]Seq 维护序列seq 线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
- 【分块】bzoj1798 [Ahoi2009]Seq 维护序列seq
分块,打标记,维护两个标记:乘的 和 加的. 每次 区间乘的时候,对 乘标记 和 加标记 都 乘上那个值. 每次 区间加的时候 对 加标记 加上那个值. (ax+b)*v=axv+bv.开 long ...
- [bzoj1798][Ahoi2009]Seq 维护序列seq ([洛谷P3373]【模板】线段树 2)
题目大意:有$n$个数,有$m$个操作,有三种: $1\;l\;r\;x:$把区间$[l,r]$内的数乘上$x$ $2\;l\;r\;x:$把区间$[l,r]$内的数加上$x$ $3\;l\;r:$询 ...
随机推荐
- 关于安装Visual Studio 2015 RC版卡主不动的解决方案
在官方网站下载了vs_community.exe自动下载安装的软件进行安装,安装到github时候 卡了1个小时 一直显示正在获取,遂感觉不大对劲,使用了FQ程序,过了2分钟果然正常获取安装,进入了下 ...
- nios II--实验7——数码管IP硬件部分
数码管 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> ...
- mysql 根据字段重复 删除 保留一条
delete from TableName where id not in (select minid from (select min(id) as minid from TableName gro ...
- linux 权限
ls -la 查看文件 drwxr-xr-x 2 root root 4096 ...... 第一个d:代表目录:-代表文件 后面三个一组:r:读:w:写:x:执行 第一个root 代表所属用户: 第 ...
- 1116Xlinux初学习之正则表达式和通配符
一.正则表达式: 元字符是用来阐释字符表达式意义的字符,简言之,就是用来描述字符的字符. 正则表达式RE(Regular Expression)是由一串字符和元字符构成的字符串. 正则表达式的主要功能 ...
- SpringMVC学习--json
简介 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便.比如:webservice接口,传输json数据. springmvc与json交互 @RequestB ...
- Node.js项目目录介绍
新建的项目结构应该是这样 bin:项目的启动文件,也可以放其他脚本. node_modules:用来存放项目的依赖库. public:用来存放静态文件(css,js,img). routes:路由控制 ...
- Ceph: validate that the RBD cache is active
Ceph: validate that the RBD cache is active Quick and simple test to validate if the RBD cache is en ...
- 《Android性能优化》学习笔记链接<转载>
今天找到一博文汇总了 Android性能优化 比较好的文章 ,本计划全看完,自己再精简下,因篇幅太长,先收藏了,等有时间 再仔细拜读,总结自己的看法: 第一季: http://www.csdn.ne ...
- 那些用JavaScript写的操作系统
之前有人说过Chrome是新的C语言运行环境(Chrome Is The New C Runtime) ,不过笔者更倾向于Web是新的C语言运行环境,而且这种技术绝对没有版权问题,也绝不会被一家公司垄 ...