BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq
Time Limit: 30 Sec Memory Limit: 64 MB
Submit: 5504 Solved: 1937
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4 5 6 7
5
1 2 5 5
3 2 4
2 3 7 9
3 1 3
3 4 7
Sample Output
35
8
HINT
【样例说明】
初始时数列为(1,2,3,4,5,6,7)。
经过第1次操作后,数列为(1,10,15,20,25,6,7)。
对第2次操作,和为10+15+20=45,模43的结果是2。
经过第3次操作后,数列为(1,10,24,29,34,15,16}
对第4次操作,和为1+10+24=35,模43的结果是35。
对第5次操作,和为29+34+15+16=94,模43的结果是8。
测试数据规模如下表所示
数据编号 1 2 3 4 5 6 7 8 9 10
N= 10 1000 1000 10000 60000 70000 80000 90000 100000 100000
M= 10 1000 1000 10000 60000 70000 80000 90000 100000 100000
Source
乘法和加法
先乘后加,标记加法结合律随便算一下就好了
一直WA,随便改几个long long就A掉了.....
- //
- // main.cpp
- // ahoi2009
- //
- // Created by Candy on 10/11/16.
- // Copyright © 2016 Candy. All rights reserved.
- //
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int N=1e5+;
- typedef long long ll;
- #define m (l+r)/2
- #define lson o<<1,l,m
- #define rson o<<1|1,m+1,r
- #define lc o<<1
- #define rc o<<1|1
- inline int read(){
- char c=getchar();int x=,f=;
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- int n,p,a[N],Q,op,l,r,x;
- struct node{
- ll sum;
- ll add,mul;
- node():add(),mul(){}
- }t[N<<];
- inline void build(int o,int l,int r){
- if(l==r) t[o].sum=a[l]%p;
- else{
- build(lson);
- build(rson);
- t[o].sum=(t[lc].sum+t[rc].sum)%p;
- }
- }
- inline void paint(int o,int l,int r,ll d,ll v){
- if(v!=){
- t[o].mul=(t[o].mul*v)%p;
- t[o].add=(t[o].add*v)%p;
- t[o].sum=(t[o].sum*v)%p;
- }
- if(d!=){
- t[o].add=(t[o].add+d)%p;
- t[o].sum=(t[o].sum+(r-l+)%p*d)%p;
- }
- }
- inline void pushDown(int o,int l,int r){
- paint(lson,t[o].add,t[o].mul);
- paint(rson,t[o].add,t[o].mul);
- t[o].add=;t[o].mul=;
- }
- inline void merge(int o){
- t[o].sum=(t[lc].sum+t[rc].sum)%p;
- }
- inline void mult(int o,int l,int r,int ql,int qr,int v){
- //printf("mult %d %d %d\n",o,l,r);
- if(ql<=l&&r<=qr) paint(o,l,r,,v);
- else{
- pushDown(o,l,r);
- if(ql<=m) mult(lson,ql,qr,v);
- if(m<qr) mult(rson,ql,qr,v);
- merge(o);
- }
- }
- inline void add(int o,int l,int r,int ql,int qr,int d){
- if(ql<=l&&r<=qr) paint(o,l,r,d,);
- else{
- pushDown(o,l,r);
- if(ql<=m) add(lson,ql,qr,d);
- if(m<qr) add(rson,ql,qr,d);
- merge(o);
- }
- }
- inline ll query(int o,int l,int r,int ql,int qr){
- if(ql<=l&&r<=qr) return t[o].sum;
- else{
- pushDown(o,l,r);
- ll ans=;
- if(ql<=m) ans+=query(lson,ql,qr);
- if(m<qr) ans+=query(rson,ql,qr);//printf("q %d %d %d %d\n",o,l,r,ans);
- return ans%p;
- }
- }
- int main(int argc, const char * argv[]){
- //freopen("seqb.in","r",stdin);
- //freopen("seqb.out","w",stdout);
- n=read();p=read();
- for(int i=;i<=n;i++) a[i]=read();
- build(,,n);
- Q=read();
- for(int i=;i<=Q;i++){
- op=read();l=read();r=read();
- if(op==){
- x=read()%p;mult(,,n,l,r,x);
- }else{
- if(op==){
- x=read()%p;add(,,n,l,r,x);
- }else
- printf("%lld\n",query(,,n,l,r));
- }
- }
- return ;
- }
BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]的更多相关文章
- 【BZOJ1798】【AHOI2009】维护序列(线段树)
题目链接 题解 这不就是luogu的线段树2的板子吗.... 没有任何的区别... 上代码吧... #include<iostream> #include<cstdio> #i ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- 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 老师交给小可可一个维护数列的任务,现在小可 ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 7773 Solved: 2792[Submit ...
- 1798: [Ahoi2009]Seq 维护序列seq
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 2930 Solved: 1087[Submit ...
- BZOJ_1798_[AHOI2009]维护序列_线段树
BZOJ_1798_[AHOI2009]维护序列_线段树 题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: ( ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- 【bzoj1798】[Ahoi2009]Seq 维护序列seq 线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
随机推荐
- 面积(area)
题目描述 编程计算由"*"号围成的下列图形的面积.面积计算方法是统计*号所围成的闭合曲线中点的数目.如图所示,在10*10的二维数组中,“*”围住了15个点,因此面积为15. 0 ...
- 使用 Visual Studio Online 进行协同开发
Visual Studio Online(原来的 Team Foundation Service),是项目数据在云中的主页.在我们的云基础架构中只需数分钟便可启动并运行,无需安装或配置任何服务器.设置 ...
- Java中, 函数的调用、随机数字
函数: 独立完成某个功能的代码模块.(方法) 作用是为了让代码结构更加良好.模块清晰,实现重用. 函数的四要素:名称,输入值,加工过程,返回值 Java中函数的语法 static 返回类型 函 ...
- androidstudio报错
今天换一下IDE,结果上来就给我报错, androidstudio message:Error:java.lang.UnsupportedClassVersionError: com/android/ ...
- 从“黑掉Github”学Web安全开发
Egor Homakov(Twitter: @homakov 个人网站: EgorHomakov.com)是一个Web安全的布道士,他这两天把github给黑了,并给github报了5个安全方面的bu ...
- Bootstrap之字体图标
优点:1.减少请求 2.容易控制样式 所在位置:在下载的bootstrap文件中的fonts文件夹存放字体图标 默认路径为当前目录下,如需修改路径,则需在bootstrap.css中查找font-fa ...
- NetSuite Chinese Finance Reports
NetSuite has a strong report customization application. The standard finance reports has a different ...
- 使用 Arduino 和 LM35 温度传感器监测温度
上一篇玩儿了一下Arduino入门,这次再进一步,用一下LM35温度传感器来监测当前温度.LM35温度传感器已经在Arduino入门套件里包含了,就是那个有三个脚的小黑块儿. 我们先把这些东西连起来. ...
- LINUX下C-C++类软件的诊断
一般C/C++写程序由于内存.指针等问题在后期的过程都一般会遇到内存等资源泄露.崩溃等问题,对于这些问题,一般从哪个角度解决呢? 下面从几个角度进行总结: 内存泄露 首先需要注意一个问题是top或者h ...
- [转]File Descriptor泄漏导致Crash: Too many open files
在实际的Android开发过程中,我们遇到了一些奇奇怪怪的Crash,通过sigaction再配合libcorkscrew以及一些第三方的Crash Reporter都捕获不到发生Crash的具体信息 ...