题目

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]随机序列的更多相关文章

  1. bzoj 4597||洛谷P4340 [Shoi2016]随机序列

    https://www.lydsy.com/JudgeOnline/problem.php?id=4597 https://www.luogu.org/problemnew/show/P4340 妄图 ...

  2. [洛谷P4340][SHOI2016]随机序列

    题目大意:有$n(n\leqslant10^5)$个数,每两个数之间可以加入$+-\times$三种符号,$q(q\leqslant10^5)$次询问,每次询问修改一个数后,所有表达式可能的值的和 题 ...

  3. 【BZOJ4597】[Shoi2016]随机序列 线段树

    [BZOJ4597][Shoi2016]随机序列 Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者减号 ...

  4. BZOJ 4597: [Shoi2016]随机序列

    4597: [Shoi2016]随机序列 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 255  Solved: 174[Submit][Status ...

  5. BZOJ4597: [Shoi2016]随机序列

    Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者 减号或者乘号.那么一共有 3^(n-1) 种可能的表 ...

  6. BZOJ4597:[SHOI2016]随机序列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4597 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 ...

  7. BZOJ4597 SHOI2016随机序列(线段树)

    先考虑题目所说的太简单了的问题.注意到只要把加减号相取反,就可以得到一对除了第一项都互相抵消的式子.于是得到答案即为Σf(i)g(i),其中f(i)为前缀积,g(i)为第i个数前面所有符号均填乘号,第 ...

  8. SHOI2016 随机序列

    给你一个数列,在相邻两个数之间插入加号,减号或乘号 每次支持单点修改,求所有这样可以得到的表达式之和,膜1e9 + 7 sol: 我是个 sb ... 可以发现,如果某位置出现了加号,后面一定有一个减 ...

  9. 【bzoj4597】 [Shoi2016]随机序列

    可以发现加减号之间可以互相抵消. 真正加到答案里的只有一些前缀积. 记s[i]为a[1]*a[2]*a[3]...*a[i].那s[i]在答案中出现的次数就是2*3^(n-i-1); 修改一个数只会对 ...

随机推荐

  1. select option 不可以选

    <select> <option>Volvo</option> <option>Saab</option> <option disab ...

  2. htmt 5 素材

    http://www.html5code.net/plus/list.php?tid=20

  3. iframe定位获取

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 第一百八十九节,jQueryUI,折叠菜单 UI

    jQueryUI,折叠菜单 UI 学习要点: 1.使用 accordion 2.修改 accordion 样式 3.accordion()方法的属性 4.accordion()方法的事件 5.acco ...

  5. cv resource

    http://blog.sina.com.cn/s/blog_5086c3e20101kdy5.html

  6. echarts(3.0)的基本使用(标签式导入)

    function loadRainFallCharts(msg) { var obj = {}; obj.x = []; obj.y = []; obj.line = []; var accumula ...

  7. ExtJs学习-搭建开发环境

    Extjs是一个非常棒的ajax框架,可以用来开发十分绚丽外观的客户端框架,能使B/S框架更加具有活力.它是一个用javascript编写的框架,与后台技术无关的ajax框架.因此,可以把ExtJs使 ...

  8. ASCII码表(0-255)

  9. [HTML5&amp;CSS3]Transform具体解释

    Transform字面上就是变形,改变的意思. 在CSS3中transform主要包含以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.以下我们 ...

  10. 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字

    Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字 原创文章,欢迎转载.转载请注明:关东升的博客 看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后 ...