P2023 [AHOI2009]维护序列
震惊,双倍经验,依旧是线段树的乘法修改
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
struct sege_tree
{
int l;
int r;
long long lazymul;
long long lazyadd;
long long v;
}tree[*maxn];
int a[maxn];
long long p,ans;
int n,m,opt,l,r;
long long t;
void build(int now,int l,int r)
{
tree[now].l=l;
tree[now].r=r;
tree[now].lazymul=;
tree[now].lazyadd=;
if(l==r)
{
tree[now].v=a[l];
return;
}
else
{
int mid=(l+r)>>;
build(now*,l,mid);
build(now*+,mid+,r);
tree[now].v=tree[now*].v+tree[now*+].v;
}
tree[now].v%=p;
return;
}
void pushdown(int now,int l,int r)//标记下传
{
int mid=(l+r)>>;
tree[now*].v=(tree[now*].v*tree[now].lazymul+tree[now].lazyadd*(mid-l+))%p;
tree[now*+].v=(tree[now*+].v*tree[now].lazymul+tree[now].lazyadd*(r-mid))%p;
tree[now*].lazymul=(tree[now*].lazymul*tree[now].lazymul)%p;
tree[now*+].lazymul=(tree[now*+].lazymul*tree[now].lazymul)%p;
tree[now*].lazyadd=(tree[now*].lazyadd*tree[now].lazymul+tree[now].lazyadd)%p;
tree[now*+].lazyadd=(tree[now*+].lazyadd*tree[now].lazymul+tree[now].lazyadd)%p;
tree[now].lazymul=;
tree[now].lazyadd=;
return;
}
void update1(int now,int stdl,int stdr,int l,int r,long long k)
{
if(l>stdr||r<stdl)
{
return;
}
if(l<=stdl&&r>=stdr)
{
tree[now].v=(tree[now].v*k)%p;
tree[now].lazymul=(tree[now].lazymul*k)%p;
tree[now].lazyadd=(tree[now].lazyadd*k)%p;
return;
}
pushdown(now,stdl,stdr);
int mid=(stdl+stdr)>>;
update1(now*,stdl,mid,l,r,k);
update1(now*+,mid+,stdr,l,r,k);
tree[now].v=(tree[now*].v+tree[now*+].v)%p;
return;
}
void update2(int now,int stdl,int stdr,int l,int r,long long k)
{
if(l>stdr||r<stdl)
{
return;
}
if(l<=stdl&&r>=stdr)
{
tree[now].lazyadd=(tree[now].lazyadd+k)%p;
tree[now].v=(tree[now].v+k*(stdr-stdl+))%p;
return;
}
pushdown(now,stdl,stdr);
int mid=(stdl+stdr)>>;
update2(now*,stdl,mid,l,r,k);
update2(now*+,mid+,stdr,l,r,k);
tree[now].v=(tree[now*].v+tree[now*+].v)%p;
}
long long query(int now,int stdl,int stdr,int l,int r)
{
if(stdl>r||stdr<l)
{
return ;
}
if(stdl>=l&&stdr<=r)
{
return tree[now].v;
}
pushdown(now,stdl,stdr);
int mid=(stdl+stdr)>>;
return (query(now*,stdl,mid,l,r)+query(now*+,mid+,stdr,l,r))%p;
}
int main()
{
cin>>n>>p;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(,,n);
cin>>m;
while(m--)
{
scanf("%d",&opt);
if(opt==)
{
cin>>l>>r>>t;
update1(,,n,l,r,t);
}
else if(opt==)
{
cin>>l>>r>>t;
update2(,,n,l,r,t);
}
else
{
cin>>l>>r;
cout<<query(,,n,l,r)<<endl;
}
}
return ;
}
P2023 [AHOI2009]维护序列的更多相关文章
- 洛谷 P2023 [AHOI2009]维护序列
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷 P2023 [AHOI2009]维护序列 题解
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中 ...
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...
- 洛谷P3373 【模板】线段树 2 && P2023 [AHOI2009]维护序列——题解
题目传送: P3373 [模板]线段树 2 P2023 [AHOI2009]维护序列 该题较传统线段树模板相比多了一个区间乘的操作.一提到线段树的区间维护问题,就自然想到了“懒标记”:为了降低时间复 ...
- P2023 [AHOI2009]维护序列 题解(线段树)
题目链接 P2023 [AHOI2009]维护序列 解题思路 线段树板子.不难,但是...有坑.坑有多深?一页\(WA\). 由于乘法可能乘\(k=0\),我这种做法可能会使结果产生负数.于是就有了这 ...
- [洛谷P2023] [AHOI2009]维护序列
洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...
- 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)
洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...
- [P2023][AHOI2009]维护序列(线段树)
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
- 【luogu P2023 [AHOI2009]维护序列】 题解
题目链接:https://www.luogu.org/problemnew/show/P2023 把P3373改一改直接粘过来就A #include <iostream> #include ...
随机推荐
- 【hashMap】详谈
官方文档地说明 几个关键的信息:基于Map接口实现.允许null键/值.非同步.不保证有序(比如插入的顺序).也不保证序不随时间变化. 一.概述 HashMap 是一个散列表,它存储的内容是键值对(k ...
- 陪你解读Spring Batch(一)Spring Batch介绍
前言 整个章节由浅入深了解Spring Batch,让你掌握批处理利器.面对大批量数据毫无惧色.本章只做介绍,后面章节有代码示例.好了,接下来是我们的主角Spring Batch. 1.1 背景介绍 ...
- 命令行程序增加 GUI 外壳
Conmajia © 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 ...
- [Vue] vue2.0
vue实例 所有的 Vue 组件都是 Vue 实例,并且接受相同的选项对象 当一个 Vue 实例被创建时,它将 data 对象中的所有的属性加入到 Vue 的响应式系统中.当这些属性的值发生改变时,视 ...
- [Linux] deepin与nginx
deepin Linux Deepin 是一个基于 DEB 包管理的一个独立操作系统,和那些 Ubuntu(下个大版本是基于debian开发) 的衍生版仅仅只是换主题.调整ISO预置的软件包不同.Li ...
- 配置Nginx部署静态资源和自动跳转到https
一.首先在阿里云后台添加域名解析: 二.两个网站的静态资源在以下目录: /www/temp/blog/public 三.在服务器端配置nginx: cd /etc/nginx/conf.d 添加两个文 ...
- 物联网RFID技术之应用ETC系统
背景 信息物理系统CPS通过集成先进的感知.计算.通 信.控制等信息技术和自动控制技术,构建了物理空间与信息空间中人. 机.物.环境.信息等要素相互映射.适时交互.高效协同的复杂系统, 实现系统内资源 ...
- js或jquery实现点击某个按钮或元素显示div,点击页面其他任何地方隐藏div
点击某个元素显示div,点击页面其他任何地方隐藏div,可用javascript和jquery两种方法实现: 一:javascript实现方法技巧<script>//定义stopPropa ...
- 简简单单的Vue1(MVVM与Vue的双向绑定原理)
既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 Vue 在此之前的文章我们讲述了前端开发的工具,语言的知识,接下来我们从头开始学习一个 ...
- 调用链监控 CAT 之 URL埋点实践
URL监控埋点作用 一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview 可以在cat Transaction及Eve ...