AC日记——[Ahoi2009]Seq 维护序列seq bzoj 1798
思路:
维护两个标记;
乘:m 和 加:a
先下放乘,再下放加;
下放乘的时候要把子节点的加一块乘了;
开long long;
来,上代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 100005
#define ll long long struct TreeNodeType {
ll l,r,fa,fm,dis,mid;
};
struct TreeNodeType tree[maxn<<]; ll n,p,t,X; inline void in(ll &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} void tree_build(ll now,ll l,ll r)
{
tree[now].l=l,tree[now].r=r,tree[now].fm=;
if(l==r)
{
in(tree[now].dis);
tree[now].dis%=p;
return ;
}
tree[now].mid=l+r>>;
tree_build(now<<,l,tree[now].mid);
tree_build(now<<|,tree[now].mid+,r);
tree[now].dis=(tree[now<<].dis+tree[now<<|].dis)%p;
} inline void tree_down(ll now)
{
tree[now<<].dis=((tree[now<<].dis*tree[now].fm)%p+(tree[now<<].r-tree[now<<].l+)*tree[now].fa%p)%p;
tree[now<<|].dis=((tree[now<<|].dis*tree[now].fm)%p+(tree[now<<|].r-tree[now<<|].l+)*tree[now].fa%p)%p;
tree[now<<].fm=(tree[now<<].fm*tree[now].fm)%p;
tree[now<<|].fm=(tree[now<<|].fm*tree[now].fm)%p;
tree[now<<].fa=(tree[now<<].fa*tree[now].fm%p+tree[now].fa)%p;
tree[now<<|].fa=(tree[now<<|].fa*tree[now].fm%p+tree[now].fa)%p;
tree[now].fa=,tree[now].fm=;
} void tree_do(ll now,ll l,ll r)
{
if(tree[now].l==l&&tree[now].r==r)
{
if(t==)
{
tree[now].fm=(tree[now].fm*X)%p;
tree[now].fa=(tree[now].fa*X)%p;
tree[now].dis=(tree[now].dis*X)%p;
return ;
}
else if(t==)
{
tree[now].fa=(tree[now].fa+X)%p;
tree[now].dis=(tree[now].dis+(tree[now].r-tree[now].l+)*X)%p;
}
else X=(X+tree[now].dis)%p;
return ;
}
if(tree[now].fa||tree[now].fm!=) tree_down(now);
if(l>tree[now].mid) tree_do(now<<|,l,r);
else if(r<=tree[now].mid) tree_do(now<<,l,r);
else
{
tree_do(now<<,l,tree[now].mid);
tree_do(now<<|,tree[now].mid+,r);
}
tree[now].dis=(tree[now<<].dis+tree[now<<|].dis)%p;
} int main()
{
in(n),in(p);
tree_build(,,n);
ll m,u,v;
in(m);
while(m--)
{
in(t),in(u),in(v);
if(t==||t==) in(X),tree_do(,u,v);
else X=,tree_do(,u,v),printf("%lld\n",X);
}
return ;
}
AC日记——[Ahoi2009]Seq 维护序列seq bzoj 1798的更多相关文章
- 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 [题意] 给定一个序列,要求提供区间乘/加,以及区间求和的操作 [思路] 线段树 ...
随机推荐
- Docker从零到实践过程中的坑
欢迎指正: Centos7 下的ulimit在Docker中的坑 http://www.dockone.io/article/522 僵尸容器:Docker 中的孤儿进程 https://yq.ali ...
- 笔记-python-selenium,phantomjs
笔记-python-selenium,phantomjs 1. 简介 1.1. selenium selenium是一款自动化测试工具,支持多种语言 为什么爬虫要使用selenium呢 ...
- 使用HTTP协议访问网路
使用HTTP协议访问网路 一.使用HttpURLConnection //new一个URL对象 URL url = new URL("http://www.qq.com");//千 ...
- [转]webservice 采用SSL实现加密传输
本文转自:http://book.51cto.com/art/200906/129770.htm http://yeweiyun868.blog.163.com/blog/static/5637844 ...
- 第三模块 面向对象& 网络编程基础 实战考核
1.简述构造方法和析构方法. 构造方法(__init__):主要作用是实例化时给实例一些初始化参数,或执行一些其它的初始化工作,总之因为这个__init__只要一实例化, 就会自动执行,不管你在这个方 ...
- MySQL之索引(三)
聚簇索引 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体的细节依赖于其实现方式,但InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行.当表有聚簇索引时,它的数据行实 ...
- SparkStreaming和Kafka的整合
当我们正确地部署好Spark Streaming,我们就可以使用Spark Streaming提供的零数据丢失机制.需要满足以下几个先决条件: 1.输入的数据来自可靠的数据源和可靠的接收器: 2.应用 ...
- 61、请求数据进行gizp压缩
1.请求时进行头部处理 /** * 设置通用消息头 * * @param request */ public void setHeader(HttpUriRequest request) { // r ...
- python 学习分享-面向对象2
面向对象进阶 静态方法 一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可以调用静态方法: class Foo: ...
- vim 查找命令
/要查找的内容 自光标起始位置向下查找 ?要查找的内容 自光标起始位置向上查找