bzoj 1798 [Ahoi2009]Seq 维护序列seq
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798
线段树区间更新:
1. 区间同同时加上一个数
2. 区间同时乘以一个数
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#define lc root<<1
#define rc root<<1|1
typedef unsigned long long ull;
const int Max_N = ;
int Mod;
struct Node {
ull sum, add, mul;
};
struct SegTree {
Node seg[Max_N << ];
inline void push_up(int root) {
seg[root].sum = (seg[lc].sum + seg[rc].sum) % Mod;
}
inline void built(int root, int l, int r) {
seg[root].add = , seg[root].mul = ;
if (l == r) {
scanf("%lld", &seg[root].sum);
seg[root].sum %= Mod;
return;
}
int mid = (l + r) >> ;
built(lc, l, mid);
built(rc, mid + , r);
push_up(root);
}
inline void push_down(int root, int len) {
if (seg[root].add != || seg[root].mul != ) {
ull &_add = seg[root].add, &_mul = seg[root].mul;
seg[lc].sum = (seg[lc].sum * _mul + (len - (len >> )) * _add) % Mod;
seg[lc].mul = (seg[lc].mul * _mul) % Mod;
seg[lc].add = (seg[lc].add * _mul + _add) % Mod;
seg[rc].sum = (seg[rc].sum * _mul + (len >> ) * _add) % Mod;
seg[rc].mul = (seg[rc].mul * _mul) % Mod;
seg[rc].add = (seg[rc].add * _mul + _add) % Mod;
_add = , _mul = ;
}
}
inline void update(int root, int l, int r, int x, int y, ull val, ull mul) {
if (x > r || y < l) return;
if (x <= l && y >= r) {
seg[root].add = (seg[root].add * mul + val) % Mod;
seg[root].mul = (seg[root].mul * mul) % Mod;
seg[root].sum = (seg[root].sum * mul + val * (r - l + )) % Mod;
return;
}
push_down(root, r - l + );
int mid = (l + r) >> ;
update(lc, l, mid, x, y, val, mul);
update(rc, mid + , r, x, y, val, mul);
push_up(root);
}
inline ull query(int root, int l, int r, int x, int y) {
if (x > r || y < l) return ;
if (x <= l && y >= r) {
return seg[root].sum;
}
push_down(root, r - l + );
ull ret = ;
int mid = (l + r) >> ;
ret += query(lc, l, mid, x, y);
ret += query(rc, mid + , r, x, y);
return ret %= Mod;
}
}seg;
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w+", stdout);
#endif
int n, m, a, b, c, d;
while (~scanf("%d %d", &n, &Mod)) {
seg.built(, , n);
scanf("%d", &m);
while (m--) {
scanf("%d", &a);
if ( == a) {
scanf("%d %d %d", &b, &c, &d);
seg.update(, , n, b, c, , d);
} else if ( == a) {
scanf("%d %d %d", &b, &c, &d);
seg.update(, , n, b, c, d, );
} else {
scanf("%d %d", &b, &c);
printf("%lld\n", seg.query(, , n, b, c));
}
}
}
return ;
}
bzoj 1798 [Ahoi2009]Seq 维护序列seq的更多相关文章
- 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 ...
- 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 大概就是维护两个标记的线段树模板题. 设定优先级,先乘后加(只是相对的),$push ...
- 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 [题意] 给定一个序列,要求提供区间乘/加,以及区间求和的操作 [思路] 线段树 ...
随机推荐
- 异常System.Web.HttpException (0x80004005): Server cannot set status after HTTP headers have been sent.
在用mvc 的AuthorizeAttribute做身份验证,重写HandleUnauthorizedRequest方法,在Application_Error方法里出现异常System.Web.Htt ...
- asp.net(c#)修改时的赋值操作
赋值操作方法(将信息显示至文本框中): public void Show_Infobase(int _peoid) { DataSet ds = new DataSet(); ds = platbll ...
- android style 中一些颜色的定义
colorControlNormal 单选多选等控件颜色 colorControlActivated 单选多选等控件激活颜色
- 重载(overload)、重写:覆盖(override)、重定义:遮蔽(redefine)、多态
同一域名空间,函数名相同,签名不同 编译期绑定确定绑定函数,也称为静态多态 重写:覆盖(override) 虚函数 子类空间,函数名相同,签名相同 重定义:遮蔽(redefine) 非虚函数,子类成员 ...
- ax 的错误处理范例
#OCCRetryCount ; try { ttsbegin; //example as insert or update or delete record ttscommit; } catch(E ...
- JS常用的设计模式(15)—— 职责链模式
职责链模式是一个对象A向另一个对象B发起请求,如果B不处理,可以把请求转给C,如果C不处理,又可以把请求转给D.一直到有一个对象愿意处理这个请求为止. 打个比方,客户让老板写个php程序.老板肯定不写 ...
- C++记录debug信息的log类
取自:http://www.viksoe.dk/code/all_mfc.htm,里面有各种MFC常用的类 // LogFile.h: interface for the CLogFile class ...
- 005windows与Linux文件共享
基于网络的文件共享: 前提一:从windows能够ping通Linux: 前提二:关闭Linux防火墙,命令[/etc/init.d/iptables stop]: 方法一:通过WinSCP 步骤一: ...
- Android IOS WebRTC 音视频开发总结(十七)-- 调试技巧
本文章主要介绍WEBRTC在各平台下调试或日志查看方式,以方便问题排查,包括BS,PC,Android,IOS(本系列文章转载请说明出处,博客园RTC.Blacker). 1,浏览器开发: 这种开发方 ...
- java编程思想第四版中 net.mindview.util包
操作系统: win8.1 编译环境 JDK1.6 编辑器 notepad++ 第48页练习8 1 下载相应程序包 Thinking in Java 4ed - CODE 2 设置相应的CLASSPAT ...