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 [题意] 给定一个序列,要求提供区间乘/加,以及区间求和的操作 [思路] 线段树 ...
随机推荐
- 809. Expressive Words
https://leetcode.com/problems/expressive-words/description/ class Solution { public: int expressiveW ...
- poj 23565-Find a multiple
Find a multiple The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each ...
- 【Gitlab+Jenkins+Ansible】构建自动化部署
说明: Gitlab.Jenkins.生产服务器.测试服务器上都需要安装Git. 一.安装Gitlab 1.主机配置 IP: 10.10.10.105 OS: CentOs7. Gitlab版本:gi ...
- datagrid的基本属性&查询和清空功能的实现
1.datagrid基本属性 <script charset=UTF-8"> $(function(){ $("#datagrid").datagrid({ ...
- Event log c++ sample.
1. Init regedit. bool InitLog( TCHAR *logName, TCHAR *sourceName, TCHAR *MessageDllName ) { // This ...
- mysql中为int设置长度究竟是什么意思
根据个人的实验并结合资料:1.长度跟可以使用的值的范围无关,值的范围仅跟类型对应的存储字节数和是否unsigned有关:2.长度指的是显示宽度,比如,指定3位int,那么id为3和id为300的值,在 ...
- github readme.md 添加图片
简要: 将图片放在仓库里面,在文件里链接它,最后 push 到 github 上. github 图片链接格式: (http://github.com/yourname/your-repository ...
- Python3 HTMLTestRunner自动化测试报告美化
# FileName : MyHTMLTestRunner.py # Author : wangyinghao # DateTime : 2019/1/9 21:04 # SoftWare : PyC ...
- 混淆矩阵、准确率、召回率、ROC曲线、AUC
混淆矩阵.准确率.召回率.ROC曲线.AUC 假设有一个用来对猫(cats).狗(dogs).兔子(rabbits)进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结.假设总共 ...
- Leetcode 514.自由之路
自由之路 视频游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并使用表盘拼写特定关键词 ...