题解

我们发现只有从第一个往后数,用乘号联通的块是有贡献的

为什么,因为后面所有表达式 肯定会有 + ,还会有个-,贡献全都被抵消了

所以我们处理出前缀乘积,然后乘上表达式的方案数

答案就是\(\sum_{i = 1}^{n - 1} S[i] * 2 * 3^{n - 1 - i} + S[n]\)

设新值为v,旧值为u,修改的时候相当于一段区间乘上\(\frac{v}{u}\)

线段树维护即可

代码

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <cmath>
#include <bitset>
#define enter putchar('\n')
#define space putchar(' ')
//#define ivorysi
#define pb push_back
#define MAXN 100005
#define mo 974711
#define pii pair<int,int>
#define mp make_pair
#define fi first
#define se second using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;char c = getchar();T f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 - '0' + c;
c = getchar();
}
res = res * f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) out(x / 10);
putchar('0' + x % 10);
}
const int MOD = 1000000007;
int N,Q;
int a[MAXN],pow3[MAXN],Line[MAXN];
struct node {
int l,r,sum,MK;
}tr[MAXN * 4];
int mul(int a,int b) {
return 1LL * a * b % MOD;
}
int inc(int a,int b) {
return a + b >= MOD ? a + b - MOD : a + b;
}
int fpow(int x,int c) {
int res = 1,t = x;
while(c) {
if(c & 1) res = mul(res,t);
t = mul(t,t);
c >>= 1;
}
return res;
}
void update(int u) {
tr[u].sum = inc(tr[u << 1].sum,tr[u << 1 | 1].sum);
}
void addlazy(int u,int v) {
tr[u].sum = mul(tr[u].sum,v);
tr[u].MK = mul(tr[u].MK,v);
}
void pushdown(int u) {
if(tr[u].MK != 1) {
addlazy(u << 1,tr[u].MK);
addlazy(u << 1 | 1,tr[u].MK);
tr[u].MK = 1;
}
}
void build(int u,int L,int R) {
tr[u].l = L;tr[u].r = R;
tr[u].MK = 1;
if(L == R) {
tr[u].sum = Line[L];
return ;
}
int mid = (L + R) >> 1;
build(u << 1,L,mid);
build(u << 1 | 1,mid + 1,R);
update(u);
}
void Change(int u,int L,int R,int v) {
if(tr[u].l == L && tr[u].r == R) {
addlazy(u,v);return;
}
int mid = (tr[u].l + tr[u].r) >> 1;
pushdown(u);
if(R <= mid) Change(u << 1,L,R,v);
else if(L > mid) Change(u << 1 | 1,L,R,v);
else Change(u << 1,L,mid,v),Change(u << 1 | 1,mid + 1,R,v);
update(u);
}
void Solve() {
read(N);read(Q);
for(int i = 1 ; i <= N ; ++i) read(a[i]);
pow3[0] = 1;
for(int i = 1 ; i <= N ; ++i) pow3[i] = mul(pow3[i - 1],3);
int t = 1;
for(int i = 1 ; i <= N ; ++i) {
t = mul(t,a[i]);
if(i != N) Line[i] = mul(t,mul(2,pow3[N - i - 1]));
else Line[i] = t;
}
build(1,1,N);
int u,v;
while(Q--) {
read(u);read(v);
t = mul(v,fpow(a[u],MOD - 2));a[u] = v;
Change(1,u,N,t);
out(tr[1].sum);enter;
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

番外:童年的回忆

(话说我要不要把另一个blog上童年的回忆的三道题搬过来呢?

当年,是我第一次考省选(是,我初二)

我当时很天真的以为LN妹子那么少没准我真能考进省队呢

怀着这种天真的想法进了省选的考场,看完之后……发现三道题都不会,连煞笔暴力都不会

我尝试用我上个月刚学的lca去写某个最裸的暴力,不知道多少分,好吧,五个小时里我有三个小时都在debug 倍增lca(菜成狗了呀><

后来我第一天爆零了,第二天继续懵逼er

发现有提答,我很开心的用我NOIP前刚学的dfs写了一个大搜索!很高兴的连最小的点也跑不出来(手动再见

然后发现有两个点性质非常特殊啊,手玩了一下

哎我最后这场省选有分啊,好像第二天有道写了暴力,然后还有提答有20,一共有40分呢!

LN队线(好吧,当年卡线进省队的是24><)也就80几分的样子,看来我努努力还是可以进省队的(当年LN的女队是谁啊?忘记了。。。NEYC的?

在幼小的心灵里从此觉得省选是个非常毒瘤的东西,最多也就打打暴力了呀。。暴力打好了没准就进了

现在我忽然发现……哎学长为啥当年拿的分那么少感觉这场比赛并没有那么难啊……

后来初三全省就我一个妹子NOIP一等,LN又规定只有NOIP一等奖选手才能选省队,考完NOIP直接钦定省队了啊,美滋滋(然鹅我并没有重视这场NOI……因为我要中考QAQ

虽然最后考了全省第8,然而省队名额只有7个,其实也是没过省队线的qwq,看着学长们明明很靠前却被1/3卡掉,难过

算了,再多的事等到之后再回忆吧,我写的太多了。。。

【LOJ】#2028. 「SHOI2016」随机序列的更多相关文章

  1. loj2028 「SHOI2016」随机序列

    定义区间是内部只含有乘号的区间. 对于区间左端点是 \(l \geq 2\) 的情况,左端点前头是加号的情况和前头是减号的情况的个数是相同的.因此这些区间不对答案产生贡献. 所以区间左端点必定是 \( ...

  2. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  3. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  4. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  5. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  6. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  7. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

  8. Loj #3056. 「HNOI2019」多边形

    Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...

  9. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

随机推荐

  1. 简便开发插件 -- lombok

    lombok是一款可以精减java代码.提升开发人员生产效率的辅助工具,可以利用注解在编译期自动生成setter/getter/toString()/constructor代码. 彻底将开发人员从繁琐 ...

  2. Linux下U盘、SD卡挂载与卸载

    1.手动挂载/卸载U盘.SD卡 对于ARM Linux来说,第一次使用U盘或SD时,U盘这个文件目录是不能直接进入的,我们需要对其进行挂载,然后再接下来的使用中就可以直接进行使用了.通过再网上查资料, ...

  3. bzoj千题计划109:bzoj1019: [SHOI2008]汉诺塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题目中问步骤数,没说最少 可以大胆猜测移动方案唯一 (真的是唯一但不会证) 设f[i][j] ...

  4. Jenkins git 的配置及问题解决

    背景:最近项目需要 Jenkins 集成git,着手记录遇到的问题及解决方式 一.搭建Jenkins环境步骤这里(略) 二.安装Jenkins插件(系统管理-->插件管理-->可选插件)选 ...

  5. IE6 下 DD_belatedPNG 引发的血案

    群里一朋友Q我,说遇到兼容性问题了,我说为何不用jQuery呢(因为他们公司要求尽量js写).他说用了,还是有问题,IE6下不行,其他都行.然后他发我代码,我一开始真以为是兼容性问题,比如数组对象最后 ...

  6. 如何定制Gtk版Emacs的Widget外观

    当我们使用 xlib 版的Emacs时,可以通过 XResource 定义 Emacs 的菜单 栏.工具条.滚动条的外观. 现在,在Linux上我们大多使用 gtk版的Emacs,是否还有办法定义 E ...

  7. Spring Aop、拦截器、过滤器的区别

    Filter过滤器:拦截web访问url地址.Interceptor拦截器:拦截以 .action结尾的url,拦截Action的访问.Spring AOP拦截器:只能拦截Spring管理Bean的访 ...

  8. sql server 查询本年的每个月的数据

    一.以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据CreateDate字段判断,计算总和,查询语句如下: end) as '1月', end) as '2月', end) as ...

  9. 如何更优雅地写Django REST framework

    DRF(Django REST framework)是一个高度封装的框架,这导致想完成一件事情可以通过重写父类函数的方式从DRF的各个层次来写,都能够实现目的. 比如写视图函数,可以用继承APIVie ...

  10. Python基础入门(一)

    1.在线教程 2.Python下载地址,安装步骤,就是next.next... 3.配置环境变量(win8) 电脑 --> 属性 --> 高级系统设置 --> 环境变量,找到系统变量 ...