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); 修改一个数只会对 ...
随机推荐
- Python运行机制(转)
From:https://blog.csdn.net/jeff_liu_sky_/article/details/52097060 https://stackoverflow.com/question ...
- CMake error:System Error:No such file or directory CMake error:Could not open file for write in copy operation xxxx.ros_Config.cmake.tmp.
微型电脑或嵌入式与电脑还是有点不同的,在微型电脑上ros indigo 版本下利用catkin编译如果你遇到如下错误: CMake error:System Error:No such file or ...
- 傅里叶叠层成像FP(Fourier Ptychographic Imaging)查资料
傅里叶叠层成像FP(Fourier Ptychographic Imaging) 傅里叶叠层显微术(FPM)是一种新型的计算显微成像技术,FPM与传统显微术照明方式不同,常采用可编程LED阵列进行不同 ...
- JDK的命令具体解释操作
JDK的命令具体解释1 rmic 功能说明: rmic 为远程对象生成 stub 和 skeleton. 语法: rmic [ options ] package-qualified-class-na ...
- NGUI Checkbox与PlayerPrefs
UICheckboxPrefs.cs 1,bool isChecked:false 为“初始”状态,true为“选中”: 2,bool startsChecked:true,一运行,就显示UISpri ...
- HDU1688(Sightseeing)
题目链接:传送门 题目大意:给你一幅图(单向边),找出从起点到终点有多少条不同路径(最短路或者比最短路长度大1) 题目思路:二维dijkstra,真的是要对dijkstra理解非常透彻才行,距离数组d ...
- vs编译程序不能实现,“未能完成操作 未指定的错误”的解决办法
1.先把.vcproj 文件剪切到其他地方 2.打开.sln,报错->点“确定”->再点“确定” 3.把 .vcproj 文件 放回来,在vs2005右边的“解决方案”处右键 重新加载,就 ...
- 基于HttpClient、Jsoup的爬虫获取指定网页内容
不断尝试,发现越来越多有趣的东西,刚刚接触Jsoup感觉比正则表达式用起来方便,但也有局限只适用HTML的解析. 不能尝试运用到四则运算中(工作室刚开始联系的小程序). 在原来写的HttpClient ...
- MySQL权限系统(三).权限表 Grant Tables
7.2.2 Grant Tables 授权表 The mysql system database includes several grant tables that contain informat ...
- ubuntu下MySQL无法启动Couldn't find MySQL server (/usr/bin/mysqld_safe)”
一台虚拟测试机,启动的时候,报上述错误,从这个报错来看,多半是因为读取到了另外的my.cnf导致的 那么,my.cnf放置在什么地方? 可以通过如下指令获取到 root@mysql:~# mysqld ...