AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)
我是不会说这个题很坑的。。
改了一晚上。。。
// 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 (线段树好题?)的更多相关文章
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- 【bzoj1798】[Ahoi2009]Seq 维护序列seq 线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )
线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...
- 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 老师交给小可可一个维护数列的任务,现在小可 ...
- 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 线段树多标记(区间加+区间乘)
[题意]给定序列,支持区间加和区间乘,查询区间和取模.n<=10^5. [算法]线段树 [题解]线段树多重标记要考虑标记与标记之间的相互影响. 对于sum*b+a,+c直接加上即可. *c后就是 ...
- bzoj 1798 维护序列seq 线段树
裸的线段树,注意标签下放就行了 多么痛的领悟,一定要开int64 /************************************************************** Pro ...
- bzoj 1798 [Ahoi2009]Seq 维护序列seq ——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1798 先乘后加,就可给加法标记乘上乘法标记. 注意可能有 *0 的操作,所以 pshd 时不 ...
随机推荐
- HDU_1398_母函数
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- Content-Encoding与Content-Type的区别
RFC 2616 for HTTP 1.1 specifies how web servers must indicate encoding transformations using the Con ...
- <转>python 发送邮件实例
文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText fr ...
- JS的Key-Val(键值对)设置Key为动态的方法
问题描述: 需要生成一个对象, 这个对象为 {key: value}, 现在要让key是动态的 解决方案: function(key, value){ let keyValue = {}; keyVa ...
- Robot Framework(五)使用测试库
使用测试库 测试库包含那些最低级别的关键字,通常称为 库关键字,实际上与被测系统交互.所有测试用例总是使用某些库中的关键字,通常是通过更高级别的用户关键字.本节介绍如何使用测试库以及如何使用它们提供的 ...
- 自定义View实现拖动小圆球,并随机改变其颜色
//简单实现package com.example.demo1; import android.content.Context;import android.graphics.Canvas;impor ...
- JS常见的四种设计模式
1 工厂模式 简单的工厂模式可以理解为解决多个相似的问题; function CreatePerson(name,age,sex) { var obj = new Object(); obj.name ...
- (31)Spring Boot导入XML配置【从零开始学Spring Boot】
[来也匆匆,去也匆匆,在此留下您的脚印吧,转发点赞评论: 您的认可是我最大的动力,感谢您的支持] Spring Boot理念就是零配置编程,但是如果绝对需要使用XML的配置,我们建议您仍旧从一个@Co ...
- hdu 4858 容器的简单模拟
我用临接表模拟容器超时 #include<stdio.h> #include<string.h> #include<vector> using namespace ...
- 洛谷——P1507 NASA的食物计划
https://www.luogu.org/problem/show?pid=1507#sub 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安 全技术问题一直大伤脑筋,因此在各方压力 ...