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.. ---------------------------------- ...
随机推荐
- Centos下nginx支持https协议
1.首先配置nginx及其他插件,这个Google下,很多配置方案. 2.配置服务器的证书.操作步骤如下: [root@localhost ~]# cd /etc/pki/tls/certs [roo ...
- 概览JVM的基本结构和JVM内存结构
概览JVM的基本结构和JVM的内存结构 这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫 ...
- 201671010127 2016—2017-2 通过一个小程序对Java的再认识。
学习了将近四周的Java语言,对于Java语言,我也有了更进一步的理解,出于对Java语言的喜爱,我总是喜欢没事的时候,自己敲一些很简单的代码,一边学习Java语言,一边对比C语言,往往可以帮助我们更 ...
- mysql免安装版1067错误终极解决办法|在windows平台下MySql启动时的1067错误的解决方法及反思
[windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 [提示] 按部就班,可能并不能解决你的问题, ...
- js 操作table
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs ...
- 命令行编译java的一点总结
今天在使用命令行编译时遇到些问题,顺便又仔细分析了一些基础知识,记录总结一下. 下面使用javac和java命令都是在 D:\Workspace\java目录下执行的: 1 //Inner.java ...
- solidity错误处理
官方文档: https://solidity.readthedocs.io/en/develop/control-structures.html#error-handling-assert-requi ...
- Introduction to Partial View
By Jignesh Trivedi on May 14, 2015 http://www.c-sharpcorner.com/UploadFile/ff2f08/partial-view-in-mv ...
- Binder的工作机制浅析
在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...
- psimpl_v7_win32_demo
psimpl - generic n-dimensional polyline simplification 通用N维折线简化程序 Author - Elmar de Koning 作者 - Elma ...