bzoj1798 1
1798: [Ahoi2009]Seq 维护序列seq
Time Limit: 30 Sec Memory Limit: 64 MB
Submit: 5866 Solved: 2079
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4 5 6 7
5
1 2 5 5
3 2 4
2 3 7 9
3 1 3
3 4 7
Sample Output
35
8
HINT
【样例说明】
初始时数列为(1,2,3,4,5,6,7)。
经过第1次操作后,数列为(1,10,15,20,25,6,7)。
对第2次操作,和为10+15+20=45,模43的结果是2。
经过第3次操作后,数列为(1,10,24,29,34,15,16}
对第4次操作,和为1+10+24=35,模43的结果是35。
对第5次操作,和为29+34+15+16=94,模43的结果是8。
测试数据规模如下表所示
数据编号 1 2 3 4 5 6 7 8 9 10
N= 10 1000 1000 10000 60000 70000 80000 90000 100000 100000
M= 10 1000 1000 10000 60000 70000 80000 90000 100000 100000
Source
#include<vector>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
#define N 200010
ll n,m,p;
ll a[N];
ll sum[N<<],tag1[N<<],tag2[N<<];
void build(int l,int r,int x)
{
if(l==r)
{
sum[x]=a[l];
return;
}
int mid=(l+r)>>;
build(l,mid,x<<);
build(mid+,r,x<<|);
sum[x]=sum[x<<]+sum[x<<|];
sum[x]%=p;
}
void pushdown(int x,int l,int r)
{
if(!tag1[x]&&tag2[x]==) return;
int mid=(l+r)>>;
tag2[x<<]=tag2[x<<]*tag2[x]%p;
tag2[x<<|]=tag2[x<<|]*tag2[x]%p;
tag1[x<<]=(tag1[x<<]*tag2[x]+tag1[x])%p;
tag1[x<<|]=(tag1[x<<|]*tag2[x]+tag1[x])%p;
sum[x<<]=(sum[x<<]*tag2[x]+(mid-l+)*tag1[x])%p;
sum[x<<|]=(sum[x<<|]*tag2[x]+(r-mid)*tag1[x])%p;
tag1[x]=; tag2[x]=;
}
void update1(int l,int r,int x,int a,int b,int c)
{
if(l>b||r<a) return;
if(l>=a&&r<=b)
{
tag2[x]*=c;
tag1[x]*=c;
sum[x]*=c;
sum[x]%=p; tag2[x]%=p; tag1[x]%=p;
return;
}
pushdown(x,l,r);
int mid=(l+r)>>;
update1(l,mid,x<<,a,b,c);
update1(mid+,r,x<<|,a,b,c);
sum[x]=sum[x<<]+sum[x<<|];
sum[x]%=p;
}
void update2(int l,int r,int x,int a,int b,int c)
{
if(l>b||r<a) return;
if(l>=a&&r<=b)
{
tag1[x]+=c;
sum[x]+=(r-l+)*c;
sum[x]%=p; tag1[x]%=p;
return;
}
pushdown(x,l,r);
int mid=(l+r)>>;
update2(l,mid,x<<,a,b,c);
update2(mid+,r,x<<|,a,b,c);
sum[x]=sum[x<<]+sum[x<<|];
sum[x]%=p;
}
ll query(int l,int r,int x,int a,int b)
{
if(l>b||r<a) return ;
if(l>=a&&r<=b) return sum[x];
ll ret=; int mid=(l+r)>>;
pushdown(x,l,r);
ret+=query(l,mid,x<<,a,b);
ret+=query(mid+,r,x<<|,a,b);
ret%=p;
return ret;
}
int main()
{
scanf("%d%d",&n,&p);
for(int i=;i<N;i++) tag2[i]=;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
build(,n,);
scanf("%d",&m);
while(m--)
{
int opt,l,r,c; scanf("%d",&opt);
if(opt==)
{
scanf("%d%d%d",&l,&r,&c); update1(,n,,l,r,c);
}
if(opt==)
{
scanf("%d%d%d",&l,&r,&c); update2(,n,,l,r,c);
}
if(opt==)
{
scanf("%d%d",&l,&r);
printf("%lld\n",query(,n,,l,r));
}
// debug(1,n,1);
}
// fclose(stdin);
// fclose(stdout);
return ;
}
bzoj1798 1的更多相关文章
- 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 ...
- BZOJ1798——[Ahoi2009]Seq维护序列seq
1.题目大意:区间修改乘法操作和加法操作,求区间和 2.分析:为了填补bzoj2631的坑还是写一发题解吧,首先呢,既然想要双标记,但是这两个标记之间又有着制约作用,所以要定义优先级,这个优先级就定义 ...
- BZOJ1798[Ahoi2009]Seq 维护序列seq 题解
题目大意: 有长为N的数列,有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值. ...
- 【双标记线段树】bzoj1798维护序列seq
一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...
- 【bzoj1798】维护序列
线段树维护两个标记. *0的操作在实质上没有任何影响. #include <cstdio> #include <cctype> #define rep(i,a,b) for ( ...
- bzoj1798 [Ahoi2009]维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- BZOJ1798 AHOI2009 维护数列
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- 【BZOJ1798】【AHOI2009】维护序列(线段树)
题目链接 题解 这不就是luogu的线段树2的板子吗.... 没有任何的区别... 上代码吧... #include<iostream> #include<cstdio> #i ...
- 【线段树】【BZOJ1798】【AHOI2009】维护序列
还是那个学弟@lher出的丧题之一. 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 题意简析:就是题目啊... 解题思路:显然是线段树 ...
随机推荐
- captcha库报错"OSError: cannot open resource"
问题描述 在win平台上python虚拟环境下使用captcha库生成验证码报错OSError: cannot open resource 代码 from captcha.image import I ...
- 【HDOJ6299】Balanced Sequence(贪心)
题意:给定n个只有左右括号的序列,要求将它们重新排序使得匹配的括号对数最大. n<=1e5 s[i]<=1e5 sum s[i]<=5e6 思路: 先把每个串内部的匹配数量减去,剩下 ...
- 《TCP/IP详解卷1:协议》——第4章 ARP:地址解析协议(转载)
章节回顾: 1.引言 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口的.设备驱动程序从不检查IP数据报中的目的IP地址.地址解析为这两种不同 ...
- flex里InputText不能输入中文
最近做项目都没做任何的更新,今天突然遇到在flex里的InputText无法进行中文输入,晚上查找了下资料,很多原因说是flashplayer的一个BUG. 在网上找到两种解决办法: 1.会出现这种情 ...
- python学习之-- shutil模块
shutil 模块功能:文件/文件夹的复制,压缩处理模块shutil.copyfileobj(fsrc,fdst[,length]):将文件内容拷贝到另一个文件中,也可以是部分内容举例:文件复制 im ...
- 洛谷——P2865 [USACO06NOV]路障Roadblocks
P2865 [USACO06NOV]路障Roadblocks 题目描述 Bessie has moved to a small farm and sometimes enjoys returning ...
- Java并发编程,3分分钟深入分析volatile的实现原理
volatile原理 volatile简介 Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理. 线程在工作内存进行操作后何时会写到 ...
- C# 读自己的资源文件
Assembly assm = this.GetType().Assembly;//Assembly.LoadFrom(程序集路径); foreach (string resName in assm. ...
- weblogic线程阻塞性能调优(图解)
转自:http://blog.csdn.net/z69183787/article/details/12647539 声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主 ...
- IPTABLES基本例子
iptables –F #删除已经存在的规则 iptables -P INPUT DROP #配置默认的拒绝规则.基本规则是:先拒绝所有的服务,然后根据需要再添加新的规则. iptables -A I ...