SHOI2016 随机序列
给你一个数列,在相邻两个数之间插入加号,减号或乘号
每次支持单点修改,求所有这样可以得到的表达式之和,膜1e9 + 7
sol:
我是个 sb 。。。
可以发现,如果某位置出现了加号,后面一定有一个减号把它消掉,于是答案就是一些出现了好几次的前缀积之和
算一下每段前缀积的贡献即可
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x = ,f = ;char ch = getchar();
for(;!isdigit(ch);ch = getchar())if(ch == '-')f = -f;
for(;isdigit(ch);ch = getchar())x = * x + ch - '';
return x * f;
}
int n,q;
const int mod = 1e9 + ,maxn = 1e5 + ;
int a[maxn],fac[maxn];
#define ls (x << 1)
#define rs ((x << 1) | 1)
int seg[maxn << ],tag[maxn << ];
inline int pw(int x,int t)
{
int res = ;x %= mod;
while(t)
{
if(t & )res = res * x % mod;
x = x * x % mod;
t = t >> ;
}
return res;
}
inline void build(int x,int l,int r)
{
tag[x] = ;
if(l == r)seg[x] = fac[l];
else
{
int mid = (l + r) >> ;
build(ls,l,mid);build(rs,mid + ,r);
seg[x] = (seg[ls] + seg[rs]) % mod;
}
}
inline void pushdown(int x,int l,int r)
{
if(tag[x] != )
{
(tag[ls] *= tag[x]) %= mod;(tag[rs] *= tag[x]) %= mod;
(seg[ls] *= tag[x]) %= mod;(seg[rs] *= tag[x]) %= mod;
tag[x] = ;
}
}
inline void update(int x,int l,int r,int L,int R,int val)
{
if(L <= l && r <= R)
{
(seg[x] *= val) %= mod;
(tag[x] *= val) %= mod;
return;
}
pushdown(x,l,r);
int mid = (l + r) >> ;
if(L <= mid)update(ls,l,mid,L,R,val);
if(R > mid)update(rs,mid + ,r,L,R,val);
seg[x] = (seg[ls] + seg[rs]) % mod;
}
signed main()
{
n = read(),q = read();
for(int i=;i<=n;i++)a[i] = read();
int mul = ;
for(int i=;i<=n;i++)
{
mul = (long long)mul * a[i] % mod;
if(i == n)fac[i] = mul;
else fac[i] = (long long)mul * * pw(, n - i - ) % mod;
}build(,,n);
while(q--)
{
int p = read(),v = read();
update(,,n,p,n,(long long)v * pw(a[p],mod - ) % mod);
a[p] = v;
printf("%lld\n",seg[]);
}
}
$$\sum_{i=1}^{n-1}sum_i \times 2 \times 3^{n-i-1} + sum_n$$
$sum$ 数组为前缀积
SHOI2016 随机序列的更多相关文章
- 【BZOJ4597】[Shoi2016]随机序列 线段树
[BZOJ4597][Shoi2016]随机序列 Description 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 Ai+1 间都插入一个加号或者减号 ...
- P4340 [SHOI2016]随机序列
题目 P4340 [SHOI2016]随机序列 思维好题 做法 是否觉得水在于你是否发现加减是会抵消的,所以我们只用考虑乘的部分 一块乘只能前面无号(也就是前缀形式)才统计,所以用线段树维护区间前缀乘 ...
- 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) 种可能的表 ...
- [洛谷P4340][SHOI2016]随机序列
题目大意:有$n(n\leqslant10^5)$个数,每两个数之间可以加入$+-\times$三种符号,$q(q\leqslant10^5)$次询问,每次询问修改一个数后,所有表达式可能的值的和 题 ...
- 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个数前面所有符号均填乘号,第 ...
- bzoj 4597||洛谷P4340 [Shoi2016]随机序列
https://www.lydsy.com/JudgeOnline/problem.php?id=4597 https://www.luogu.org/problemnew/show/P4340 妄图 ...
- 【bzoj4597】 [Shoi2016]随机序列
可以发现加减号之间可以互相抵消. 真正加到答案里的只有一些前缀积. 记s[i]为a[1]*a[2]*a[3]...*a[i].那s[i]在答案中出现的次数就是2*3^(n-i-1); 修改一个数只会对 ...
随机推荐
- UITableView 右侧索引
1.设置右侧索引字体颜色 self.tabView.sectionIndexColor = [UIColor blackColor]; 2.设置右侧索引背景色 self.cityTabView.sec ...
- php数据类型的true和false
- SNMP 监控方式的配置
由于某些设备并不能安装 Agent,或者不方便安装 Agent 等因素,将采用 SNMP 方式进行监控 1.Linux 配置 SNMP [root@crazy-acong ~]# yum -y ins ...
- java.time.format.DateTimeFormatter
Java的日期与时间 DateTimeFormatter类是Java 8中日期时间功能里,用于解析和格式化日期时间的类,位于java.time.format包下. 1.预定义的DateTimeFo ...
- SpringBoot_集成Shiro后获取当前用户
//SecurityUtils.getSubject().getPrincipal(); 就可以获取了 protected User getCurrentUser(){ return (User) ...
- 华为机试ACM(字符组合问题)
今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...
- windows10 Python2和Python3共存
通过配置环境变量,达到使用python命令启动python2,使用python3命令启动python3,pip启动pip2, pip3启动pip3的目的,互不影响. 1.安装python2.7 安装 ...
- linux基础part4
linux基础 一.系统监控命令 1.top命令: a.如图显示使用top命令查看系统的当前运行的情况.如图对top命令执行的结果做了简单的图解,下面针对每一项做详细的解释. b.第一行显示的内容依次 ...
- 什么是gevent
gevent是一个基于协程的python网络库,它使用greenlet在libev或libuv事件循环之上提供高级同步API 功能包括 基于libev或libuv的快速时间循环 基于greenlets ...
- ButterKnife 原理解析
一.使用方法 1.添加依赖. implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewhart ...