P4340 [SHOI2016]随机序列
题目
P4340 [SHOI2016]随机序列
思维好题
做法
是否觉得水在于你是否发现加减是会抵消的,所以我们只用考虑乘的部分
一块乘只能前面无号(也就是前缀形式)才统计,所以用线段树维护区间前缀乘就行了
My complete code
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL maxn=3000000,p=1e9+7;
inline LL Read(){
LL x(0),f(1);char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*f;
}
inline LL Pow(LL base,LL b){
LL ret(1);
while(b){
if(b&1) ret=ret*base%p;
base=base*base%p,b>>=1;
}return ret;
}
LL root,nod,n,m,a[maxn];
LL lazy[maxn],sum[maxn],s[maxn],pw[maxn],son[maxn][2];
void Build(LL &now,LL l,LL r){
now=++nod; lazy[now]=1;
if(l==r){
if(l!=n)
sum[now]=s[l]*2*pw[n-l-1]%p;
else sum[now]=s[l];
return;
}
LL mid(l+r>>1);
Build(son[now][0],l,mid),Build(son[now][1],mid+1,r);
sum[now]=(sum[son[now][0]]+sum[son[now][1]])%p;
}
inline void Pushdown(LL now){
LL lc(son[now][0]),rc(son[now][1]);
if(lazy[now]!=1){
lazy[lc]=lazy[lc]*lazy[now]%p;
lazy[rc]=lazy[rc]*lazy[now]%p;
sum[lc]=sum[lc]*lazy[now]%p,sum[rc]=sum[rc]*lazy[now]%p;
lazy[now]=1;
}
}
void Change_m(LL now,LL l,LL r,LL lt,LL rt,LL val){
if(lt<=l&&rt>=r){
sum[now]=sum[now]*val%p;
lazy[now]=lazy[now]*val%p;
return;
}Pushdown(now);
LL mid(l+r>>1);
if(lt<=mid) Change_m(son[now][0],l,mid,lt,rt,val);
if(rt>mid) Change_m(son[now][1],mid+1,r,lt,rt,val);
sum[now]=(sum[son[now][0]]+sum[son[now][1]])%p;
}
int main(){
n=Read(),m=Read();
s[0]=pw[0]=1;
for(LL i=1;i<=n;++i)
a[i]=Read()%p,
s[i]=s[i-1]*a[i]%p,
pw[i]=pw[i-1]*3%p;
Build(root,1,n);
while(m--){
LL x(Read()),val(Read());
Change_m(root,1,n,x,n,val*Pow(a[x],p-2)%p);
a[x]=val;
printf("%lld\n",sum[root]);
}return 0;
}
P4340 [SHOI2016]随机序列的更多相关文章
- bzoj 4597||洛谷P4340 [Shoi2016]随机序列
https://www.lydsy.com/JudgeOnline/problem.php?id=4597 https://www.luogu.org/problemnew/show/P4340 妄图 ...
- [洛谷P4340][SHOI2016]随机序列
题目大意:有$n(n\leqslant10^5)$个数,每两个数之间可以加入$+-\times$三种符号,$q(q\leqslant10^5)$次询问,每次询问修改一个数后,所有表达式可能的值的和 题 ...
- 【BZOJ4597】[Shoi2016]随机序列 线段树
[BZOJ4597][Shoi2016]随机序列 Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者减号 ...
- BZOJ 4597: [Shoi2016]随机序列
4597: [Shoi2016]随机序列 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 255 Solved: 174[Submit][Status ...
- BZOJ4597: [Shoi2016]随机序列
Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...
- BZOJ4597:[SHOI2016]随机序列——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4597 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 ...
- BZOJ4597 SHOI2016随机序列(线段树)
先考虑题目所说的太简单了的问题.注意到只要把加减号相取反,就可以得到一对除了第一项都互相抵消的式子.于是得到答案即为Σf(i)g(i),其中f(i)为前缀积,g(i)为第i个数前面所有符号均填乘号,第 ...
- SHOI2016 随机序列
给你一个数列,在相邻两个数之间插入加号,减号或乘号 每次支持单点修改,求所有这样可以得到的表达式之和,膜1e9 + 7 sol: 我是个 sb ... 可以发现,如果某位置出现了加号,后面一定有一个减 ...
- 【bzoj4597】 [Shoi2016]随机序列
可以发现加减号之间可以互相抵消. 真正加到答案里的只有一些前缀积. 记s[i]为a[1]*a[2]*a[3]...*a[i].那s[i]在答案中出现的次数就是2*3^(n-i-1); 修改一个数只会对 ...
随机推荐
- 我的第六个java程序 spring-bean
配置文件 Beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo ...
- 非常好用的两个PHP函数 serialize()和unserialize()
使用serialize()函数和unserialize()函数,这两个函数的用法真是绝配,一个是进行序列化存储,另一个则是进行序列化恢复,方便极了 今天,在做一个关于PING服务的东西,由于不想把pi ...
- python3----基础函数的参数是可变参数,将传进来的参数转成列表
def myFun(*argments): values = [x for x in argments] print(values) myFun(1,2,3,4,5,6) result: [1, 2, ...
- java打开后台程序
try{ String cmds="java -version"; Process p = Runtime.getRuntime().exec(cmds); int exitVal ...
- requirejs 第一个实例
介绍:requirejs 是实现了模块化加载和按需加载的js库,防止了全局变量的污染. 1.安装 require : 在require 中文网下载 http://www.requirejs.cn/,然 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.4——Flavor Dimensions
问题: 一个product flavor不够,你需要另一个标准去区分不同版本的app 解决方案: 在product flavor中增加flavorDimensions 讨论: 在3.2章展示了一个有三 ...
- Android开发:使用DialogFragment实现dialog自定义布局
使用DialogFragment实现dialog的自定义布局最大的好处是可以更好控制dialog的生命周期. TestFragment的代码: public class TestFragment ex ...
- 《从零开始学Swift》学习笔记(Day 11)——数据类型那些事儿?
原创文章,欢迎转载.转载请注明:关东升的博客 在我们学习语言时都会学到这种语言的数据类型,在Swift中数据类型有那些呢?整型.浮点型.布尔型.字符.字符串这些类型是一定有的,其中集合. ...
- SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)
(四)列表附件 列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似. 1.附件的读取 一个列表条目的附件可以使用SPL ...
- Decimal fixed point and floating point arithmetic
decimal — Decimal fixed point and floating point arithmetic — Python 3.8.0a0 documentation https://d ...