我是不会说这个题很坑的。。

改了一晚上。。。

// by SiriusRen
#include <cstdio>
#define N 150000
#define LSON l,mid,lson
#define RSON mid+1,r,rson
#define LL long long
using namespace std;
LL n,m,mod,xx,yy,zz,jy;
LL mul[N*4],add[N*4],sum[N*4];
int get(){
int x=0;char p=getchar();
while(p<'0'||p>'9')p=getchar();
while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();
return x;
}
void build(int l,int r,int pos){
mul[pos]=1;
if(l==r){sum[pos]=get();return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
build(LSON);build(RSON);
sum[pos]=(sum[lson]+sum[rson])%mod;
}
void push_down(int pos,int lson,int rson,int num){
mul[lson]=(mul[pos]*mul[lson])%mod;
mul[rson]=(mul[pos]*mul[rson])%mod;
add[lson]=(add[lson]*mul[pos]+add[pos])%mod;
add[rson]=(add[rson]*mul[pos]+add[pos])%mod;
sum[lson]=(sum[lson]*mul[pos]+add[pos]*(num-(num>>1)))%mod;
sum[rson]=(sum[rson]*mul[pos]+add[pos]*(num>>1))%mod;
mul[pos]=1;add[pos]=0;
}
void update(int l,int r,int pos){
if(l>=xx&&r<=yy){
if(jy==1){
mul[pos]=(mul[pos]*zz)%mod;
add[pos]=(add[pos]*zz)%mod;
sum[pos]=(sum[pos]*zz)%mod;
}
else{
add[pos]=(add[pos]+zz)%mod;
sum[pos]=(sum[pos]+(r-l+1)*zz)%mod;
}
return;
}
int mid=(l+r)/2,lson=pos<<1,rson=pos<<1|1;
if(mul[pos]!=1||add[pos])
push_down(pos,lson,rson,r-l+1);
if(mid>=xx)update(LSON);
if(mid<yy)update(RSON);
sum[pos]=(sum[lson]+sum[rson])%mod;
}
int query(int l,int r,int pos){
int mid=(l+r)/2,lson=pos<<1,rson=pos<<1|1;
if(l>=xx&&r<=yy){
return sum[pos];
}
if(mul[pos]!=1||add[pos])
push_down(pos,lson,rson,r-l+1);
if(mid>=yy)return query(LSON);
else if(mid<xx)return query(RSON);
else return (query(LSON)+query(RSON))%mod;
}
int main(){
n=get();mod=get();
build(1,n,1);
m=get();
while(m--){
jy=get();xx=get();yy=get();
if(jy!=3) zz=get(),update(1,n,1);
else printf("%d\n",query(1,n,1));
}
}

AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)的更多相关文章

  1. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  2. BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 5504  Solved: 1937[Submit ...

  3. 【bzoj1798】[Ahoi2009]Seq 维护序列seq 线段树

    题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...

  4. BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )

    线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...

  5. bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...

  6. Bzoj 1798: [Ahoi2009]Seq 维护序列seq(线段树区间操作)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小可 ...

  7. bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 7773  Solved: 2792[Submit ...

  8. 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq 线段树多标记(区间加+区间乘)

    [题意]给定序列,支持区间加和区间乘,查询区间和取模.n<=10^5. [算法]线段树 [题解]线段树多重标记要考虑标记与标记之间的相互影响. 对于sum*b+a,+c直接加上即可. *c后就是 ...

  9. bzoj 1798 维护序列seq 线段树

    裸的线段树,注意标签下放就行了 多么痛的领悟,一定要开int64 /************************************************************** Pro ...

  10. bzoj 1798 [Ahoi2009]Seq 维护序列seq ——线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1798 先乘后加,就可给加法标记乘上乘法标记. 注意可能有 *0 的操作,所以 pshd 时不 ...

随机推荐

  1. Canopy聚类算法分析

          原文链接:http://blog.csdn.net/yclzh0522/article/details/6839643 Canopy聚类算法是可以并行运行的算法,数据并行意味着可以多线程进 ...

  2. YTBro Video 2016-07-30 Sat

    明日天气:多云转阴,32~24度 运动向 健身 20中极致疯狂的俯卧撑,新手请勿尝试 跑酷 大神放大招,招招见血,不信你看 赛事 2016年世界室内田径锦标赛 男子4×400接力决赛 台球 RP集中爆 ...

  3. logging模块-logging.basicConfig、logger.setLevel、handler.setLevel优先级

    logging.basicConfig < handler.setLevel < logger.setLevel 1.脚本中没有配置logger.setLevel会使用handler.se ...

  4. react功能实现-数组遍历渲染

    在react中如何将一个数组遍历,并且逐个渲染在页面上? 1.在jsx渲染中,如果这个变量是一个数组,则会展开这个数组的所有成员. var arr = [ <h1>Hello world! ...

  5. python mysql连接池

    话不多说,直接撸代码 # coding=utf-8 from DBUtils.PooledDB import PooledDB import pymysql as mysql import trace ...

  6. Solr学习记录:Getting started

    目录 Solr学习记录:Getting started 1.Solr Tutorial 2. A Quick Overview Solr学习记录:Getting started 本教程使用环境:jav ...

  7. Linux之部署虚拟环境、安装系统

    本章涵盖了Linux的优势和哲学思想,零基础详细记录了部署虚拟环境安装Linux系统,完整演示了VM虚拟机的安装与配置过程,以及Centos 7系统的安装.配置过程和初始化方法. Linux优势分析: ...

  8. JavaScript对接百度地图api实现地图标点功能

    粗略的做了个地图标点功能 首先,去百度注册开发者账号,然后进入到百度地图开放平台 进入到控制台, 创建浏览器端应用,给个安全域名 然后去开发者文档JavaScript里面找地图展示文档,直接怼上去就行 ...

  9. CvsHelper 使用指南

    用于读取和写入CSV文件的.NET库. 非常快速,灵活和易于使用. 支持读写自定义类对象. 入门 要安装CsvHelper,请从包管理器控制台运行以下操作. Install-Package CsvHe ...

  10. codeforces 257B

    #include<stdio.h> #define mod 1000000007 int main() { __int64 n,m,i,j,k,x,y,z; while(scanf(&qu ...