区间权值

小Bo有\(n\)个正整数\(a_1\)……\(a_n\),以及一个权值序列\(w_1\)……\(w_n\),现在她定义\(f(l,r)=(\sum_{i=l}^r a_i^2) *w_{r-l+1}\)。

现在他想知道\(\sum_{l=1}^n \sum_{r=l}^n f(l,r)\)的值,需要你来帮帮他,你只需要输出答案对\(10^9+7\)取模后的值。

输入格式

第一行一个正整数\(n\)

第二行\(n\)个整数\(a_1\)……\(a_n\)

第三行\(n\)个整数\(a_1\)……\(a_n\)

输出格式

输出答案\(10^9+7\)取模

样例输入

3

1 1 1

1 1 1

样例输出

10

数据范围

\(1<=n<=3*10^5\)

\(1<=a_i<=10^7\)

\(1<=w_i<=10^7\)

思路:

将\(f(l,r)=(\sum_{i=l}^r a_i^2) *w_{r-l+1}\)展开如下:

\[ \begin{pmatrix}
a_1w_1 & ……\\
(a_1+a_2)w_2 & a_2w_1 & …… \\
(a_1+a_2+a_3)w_3 & (a_2+a_3)w_2 & a_3w_1 & ……\\
(a_1+a_2+a_3+a_4)w_4 & (a_2+a_3+a_4)w_3 & (a_3+a_4)w_2 \\
…… & …… & ……\\
(a_1+a_2+……+a_n)w_n & (a_2+……+a_n)w_{n-1} & …… & a_nw_1 \\
\end{pmatrix}
\]

从第一列可以想到前缀和,所以先求出前缀和\(f[i](0<=i<=n)\)

\[ \begin{pmatrix}
(f_1-f_0)w_1 & ……\\
(f_2-f_0)w_2 & (f_2-f_1)w_1 & …… \\
(f_3-f_0)w_3 & (f_3-f_1)w_2 & (f_3-f_2)w_1 & ……\\
(f_4-f_0)w_4 & (f_4-f_1)w_3 & (f_4-f_2)w_2 \\
…… & …… & ……\\
(f_n-f_0)w_n & (f_n-f_1)w_{n-1} & …… & (f_n-f_{n-1})w_1 \\
\end{pmatrix}
\]

然后将\(w_i\)相同的项合(可以相互消去)并描绘得到下面的东西,为了方便,我还是用矩阵表示

\[ \begin{pmatrix}
(f_n)w_1 \\
(f_n+f_{n-1}-f_1)w_3\\
(f_n+f_{n-1}+f_{n-2}-f_1-f_2)w_3\\
(f_n+f_{n-1}+f_{n-2}+f_{n-3}-f_1-f_2-f_3)w_4\\
………… \\
(f_n+f_n-1+……-f_1-f_2-……f_{n-1})w_n
\end{pmatrix}
\]

现在敲是会TLE的,复杂度太高

所以再考虑一次\(f_i\)的前缀和\(g_i\),

上面就可以将\(f_i\)转换成\(g[n]-g[n-i]-g[i-1]\),

还有一个问题,由于有减法,所以可能答案出现负数,所以最后需要加模再取模。

#include <cstdio>
#include <cstring>
#include <cmath>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const ll mo=1e9+7;
const int maxn=3e5+5;
ll a[maxn],w[maxn],f[maxn],g[maxn],ans=0;
int main()
{
int n;
scanf("%d",&n);
g[0]=f[0]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i]=a[i]+f[i-1];
g[i]=(f[i]+g[i-1])%mo;
}
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=n;i++){
ans=(ans+(g[n]-g[n-i]-g[i-1])*w[i]%mo)%mo;
}
cout<<(ans+mo)%mo<<endl;
return 0;
}

2018 Wannafly summer camp Day8--区间权值的更多相关文章

  1. Wannafly summer camp Day6 - D 区间权值

    这道题实在是不该,我在化式子的时候,多此一举,把式子进行累加,导致自己当时化的式子是错的,这样导致自己卡了很久,也没想到好的思路,赛后重新分析一波,感觉巨™简单...难受的一逼. 这道题的关键在于,W ...

  2. 2018 Wannafly summer camp Day8--连通块计数

    连通块计数 描述 题目描述: 小 A 有一棵长的很奇怪的树,他由 n 条链和 1 个点作为根构成,第 i条链有 ai​ 个点,每一条链的一端都与根结点相连. 现在小 A 想知道,这棵长得奇怪的树有多少 ...

  3. 2018 Wannafly summer camp Day2--Utawarerumono

    Utawarerumono 描述 题目描述: 算术是为数不多的会让久远感到棘手的事情.通常她会找哈克帮忙,但是哈克已经被她派去买东西了.于是她向你寻求帮助. 给出一个关于变量x,y的不定方程ax+by ...

  4. 2018 Wannafly summer camp Day3--Knight

    Knight 题目描述: 有一张无限大的棋盘,你要将马从\((0,0)\)移到\((n,m)\). 每一步中,如果马在\((x,y)(x,y)\),你可以将它移动到 \((x+1,y+2)(x+1,y ...

  5. Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面.  简单的 ...

  6. 2018 Wannafly summer camp Day2--New Game!

    New Game! 描述 题目描述: Eagle Jump公司正在开发一款新的游戏.泷本一二三作为其员工,获得了提前试玩的机会.现在她正在试图通过一个迷宫. 这个迷宫有一些特点.为了方便描述,我们对这 ...

  7. 2018 Wannafly summer camp Day3--Shopping

    Shopping 描述 题目描述: 你要买n件物品,其中有一些是凳子. 商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品. 你有m辆购物车,请最小化你的花 ...

  8. 2018 Wannafly summer camp Day3--Travel

    Travel 描述 题目描述: 魔方国有n座城市,编号为1~n.城市之间通过n-1条无向道路连接,形成一个树形结构. 澜澜打算在魔方国进行mm次旅游,每次游览至少一座城市.为了方便,每次旅游游览的城市 ...

  9. 【bzoj4399】魔法少女LJJ 并查集+权值线段树合并

    题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处散发着醉人的奶浆味: ...

随机推荐

  1. height百分比以及高度自适应问题

    1.  你曾经是否说想要 高度占页面或者占div百分比无效的问题,相信你也搜索过了,就是说 需要 设置父亲父亲一直到祖宗html都要设置百分比,才有效果. 总之一句话:想用百分比设置他的高度,则它的父 ...

  2. java应用程序已被安全设置阻止的解决办法(总有一个适合你)

    1. 在1月底的一次Java自动更新升级后,我点开已经配置好的Java小程序,赫然看到如下错误: 在网上查找了很多资料,发现就是此次更新的问题,解决方法如下: 控制面板—>Java—>安全 ...

  3. Android java获取凌晨的时间戳

    这两天有一个需求是查询用户匹配的推荐信息,包含一个有效时间段,以天为单位,0时0分0秒这种. 通常java中有两种方案: 第一种:Calendar.这种比较简单,也最常见.代码如下: Calendar ...

  4. 再学UML-UML用例建模解析(一)

    UML(统一建模语言)是当前软件开发中使用最为广泛的建模技术之一,通过使用UML可以构造软件系统的需求模型(用例模型).静态模型.动态模型和架构模型.UML通过图形和文字符号来描述一个系统,它是绘制软 ...

  5. June 02nd 2017 Week 22nd Friday

    A burden of one's choice is not felt. 爱挑的担子不嫌重. When doing things I love to do, I seldom feel tired ...

  6. 了解git /github

    一 GIT是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git ...

  7. Python map/reduce/filter/sorted函数以及匿名函数

    1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...

  8. gluon实现softmax分类FashionMNIST

    from mxnet import gluon,init from mxnet.gluon import loss as gloss,nn from mxnet.gluon import data a ...

  9. Bokeh 学习

    这段时间由于在做K-means对文本进行处理,需要进行绘图,实验室编程大哥向我介绍了Bokeh来进行绘图,一直是根据自己的需求来进行对其探索,今儿个看到一篇博文,对Bokeh进行了详细的解说,做个笔记 ...

  10. POJ 2299 【树状数组 离散化】

    题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...