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 题意简析:就是题目啊... 解题思路:显然是线段树 ...
随机推荐
- bzoj4950(二分图最大匹配)
[Wf2017]Mission Improbable Time Limit: 1 Sec Memory Limit: 1024 MBSubmit: 105 Solved: 49[Submit][S ...
- CodeForces - 356A Knight Tournament
http://codeforces.com/problemset/problem/356/A 首先理解题意 每次给出l 和r 在l - r之间还有资格的选手中得出一个胜者 暴力思路: 首先维护还有资 ...
- BZOJ1775: [Usaco2009 Dec]Vidgame 电视游戏问题
n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益. 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表 ...
- isinstance()和issubclass()
内置函数中有个两个函数经常用到 isinstance() 对象 是否是 类 的一个对象 from collections import Iterable prin ...
- HDU 6333 莫队+组合数
Problem B. Harvest of Apples Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- 从零开始写STL - 智能指针
从零开始写STL - 智能指针 智能指针的分类及其特点: scoped_ptr:初始化获得资源控制权,在作用域结束释放资源 shared_ptr: 引用计数来控制共享资源,最后一个资源的引用被释放的时 ...
- MySQL注释(转)
MySQL支持3种注释风格: 1.从‘#’字符从行尾. 2.从‘-- ’序列到行尾.请注意‘-- ’(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格.tab.换行符等等). 3.从/ ...
- eclipse提速03 - 禁用动画
- 移动端CSS小结
Meta 标签 <meta name="viewport" content="width=device-width, user-scalable=no, init ...
- 项目中遇到的HQL查询问题
问题描写叙述: 目的:想要查询出全部最新版本号的组件 说明:组件:版本号 =1:n关系 ,假设这个组件仅仅有一个版本号也要可以查出来. 项目中使用的是内存数据库,无法看到表结构,这里的样例仅仅用于模拟 ...