牛客网【每日一题】5月15日题目 储物点的距离

链接:

文章目录

    • 题目描述
    • 题解:
    • 代码:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

一个数轴,每一个储物点会有一些东西,同时它们之间存在距离。
每次给个区间[l,r],查询把这个区间内所有储物点的东西运到另外一个储物点的代价是多少? 比如储物点i有x个东西,要运到储物点j,代价为x* dist( i , j ) dist就是储物点间的距离。

输入描述:

第一行两个数表示n,m

第二行n-1个数,第i个数表示第i个储物点与第i+1个储物点的距离ai

第三行n个数,表示每个储物点的东西个数bi

之后m行每行三个数x l r

表示查询要把区间[l,r]储物点的物品全部运到储物点x的花费 每次查询独立

输出描述:

对于每个询问输出一个数表示答案 答案对1000000007取模

示例1
输入

5 5
2 3 4 5
1 2 3 4 5
1 1 5
3 1 5
2 3 3
3 3 3
1 5 5

输出

125
72
9
0
70

备注:
对于100%的数据n,m <= 200000 , 0 <= ai,bi <= 2000000000

题解:

先要意识到给的距离是两个相邻的储物点的距离,我们可以据此先维护一个距离的前缀和,这样我们就可以求任意两点之间的距离。
同理,每个储物点都是存有物品的,也用前缀和来维护,这就可以求出某个区间内物品的总数量。
我们还需要用一个数组c来记录,给定区间[l,r]内所有商品距离1号仓库的总和,c[i]=c[i-1]+a[i]*b[i],
a,b,c分别代表上面三个的前缀和
有什么用呢?接着往下看

如果所给x在[l,r]的右边,也就是x>=r,当x从i变为i+1,相当于整个区间内的物品都多移动了一段距离,长度为len(i,i+1),那我们就可从i点答案的基础上直接改,从答案基础上加上[l,r]的物品数量 * len(i,i+1),也就是 ( b [ r ] - b [ l - 1 ] ) * ( a [ x ] ) - ( c [ r ] - c[ l - 1 ] )
怎么理解:[l,r]这个区间内所有物品全部从起始点移动到x点,[1,l-1]这一块是多移动了,比如看l点,从1 ~ l 再从l ~ x ,其中1~l是多移动的部分,就要剪除,l点物品总量*所有物品移动到点1的距离,这不正是我们求得c,所以减去( c [ r ] - c[ l - 1 ] )

如果x在[l,r]的左侧,也就是x<=r,当x从i变为i+1,就是和上面反过来,少移动了一段距离,距离为len(i,i+1),答案就是( c [ r ] - c[ l - 1 ] ) - ( b [ r ] - b [ l - 1 ] ) * ( a [ x ] )

如果x在[l,r]中间,你就把[l,r]分成两个区域,然后[l.x]与[x+1,r]用上面的方法对待
对了,别忘了取模

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const ll mod=1e9+7;ll a[maxn],b[maxn],c[maxn];
ll getr(ll x,ll l,ll r)//当x在右边 
{ll ans=(((b[r]-b[l-1])*a[x]%mod-((c[r]-c[l-1])%mod+mod)%mod)%mod+mod)%mod;return ans;
}
ll getl(ll x,ll l,ll r)//x在左边 
{ll ans=(((c[r]-c[l-1])%mod+mod)%mod-((b[r]-b[l-1])*a[x]%mod)%mod+mod)%mod;return ans;
}
ll x,l,r;
ll sum;
int main()
{int n,m;cin>>n>>m;for(int i=2;i<=n;i++){cin>>a[i];a[i]=(a[i-1]+a[i])%mod;}for(int i=1;i<=n;i++){cin>>b[i];c[i]=(c[i-1]+a[i]*b[i]%mod)%mod;b[i]=(b[i]+b[i-1])%mod;}while(m--){sum=0;cin>>x>>l>>r;if(r<=x){sum=getr(x,l,r);}else if(l>=x){sum=getl(x,l,r);}else {sum+=getr(x,l,x)+getl(x,x+1,r);}printf("%lld\n",sum%mod);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[XSY] 最长公共子串对(后缀自动机)

最长公共子串对 先放一段考场暴力代码&#xff1a; #include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[2005],b[2005]; int na,nb,f[2005][2005],c[2005][2005],ans; //f[i][j]表示 s[1...i]与 t[1...j]以s[i]、t[j]结尾…

P3911-最小公倍数之和【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P3911 题目大意 给出数列AAA求∑i1n∑j1nlcm(Ai,Aj)\sum_{i1}^n\sum_{j1}^nlcm(A_i,A_j)i1∑n​j1∑n​lcm(Ai​,Aj​) 解题思路 设cic_ici​表示AjiA_jiAj​i的个数&#xff0c;然后答案就是&#xff08;下面n5e4n5e4n5e4&…

【DP】奇怪汉诺塔(ybtoj DP-1-2)

奇怪汉诺塔 ybtoj DP-1-2 题目大意 求四根柱子的汉诺塔问题 输出 共12行 每行输出第一根柱子有i个圆盘的最小步数 解题思路 设aia_iai​表示三根柱子&#xff0c;第一根柱子有i个圆盘的步数 很显然是先移i-1个到第二根&#xff0c;再移最大的到第三根&#xff0c;再把i-…

牛客网【每日一题】5月18日 「土」秘法地震

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 帕秋莉掌握了一种土属性魔法 这种魔法可以在一片kk大小…

AspNetCore 中使用 InentityServer4(2)

基于上一篇文章 实现对IdnetityServer4 服务的使用1&#xff1a;添加接口解决方案&#xff0c;并且使接口受认证服务的保护&#xff1a;首先在解决方案中添加Api项目如下图所示&#xff1a;在API项目中添加Nuget 引用 如下图所示&#xff1a;Install-Package IdentityServer4.A…

[XSY] 宝藏(LCS,DP)

宝藏 首先&#xff0c;这个问题等价于给定两个字符串S,T &#xff0c;每次询问LCS(S[1,n],T[x,y])LCS(S[1,n],T[x,y])LCS(S[1,n],T[x,y])。 对每个询问重新求一遍LCSLCSLCS显然不现实&#xff0c;又因为yyy都是连续变化的&#xff0c;我们考虑探讨 LCS(S[1,n],T[x,y])与LCS(S[…

【DP】数的划分(ybtoj DP-1-3)

数的划分 ybtoj DP-1-1 题目大意 给你一个n&#xff0c;让你分成k份&#xff0c;问有多少种分法&#xff08;1,2和2,1为同一种&#xff09; 输入样例 7 3输出样例 4 样例解释 四种分法为&#xff1a;1,1,5;1,2,4;1,3,3;2,2,3.1,1,5; \ \ 1,2,4; \ \ 1,3,3; \ \ 2,2,3.1…

CF570D-Tree Requests【长链剖分】

正题 题目链接:https://www.luogu.com.cn/problem/CF570D 题目大意 nnn个点的一棵树&#xff0c;每个节点有字母&#xff0c;每次询问一个节点xxx的子树中深度为kkk的所有点的字母能否经过重排构成一个回文串。 解题思路 首先把每个字母的奇偶状压一下 然后方法比较多&#x…

牛客网 【每日一题】5月13日 加分二叉树

试题链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 设一个n个节点的二叉树tree的中序遍历为&#xff0…

Visual Studio 2017 15.8概览

Microsoft正式发布VS2017的第八次更新&#xff0c;即15.8。15.8提供了今年夏天预览的大量新特性&#xff0c;包括Code Cleanup、IDE支持多重查补&#xff08;Multiple Caret&#xff09;、Visual Studio Code和ReSharper快捷键设置等。各类开发人员均可受益于这些已供使用的新特…

[XSY] 简单的数论题(数学、构造)

简单的数论题 m(a3b3)n(c3d3)m(a^3b^3)n(c^3d^3)m(a3b3)n(c3d3) 考虑因式分解(a3b3),(c3d3):考虑因式分解(a^3b^3),(c^3d^3):考虑因式分解(a3b3),(c3d3): a3b3(ab)3−3ab(ab)(ab)(a2b2−ab)a^3b^3(ab)^3-3ab(ab)(ab)(a^2b^2-ab)a3b3(ab)3−3ab(ab)(ab)(a2b2−ab) c3d3(cd)3−3c…

P4322-[JSOI2016]最佳团体【0/1分数规划,树形背包】

正题 题目链接:https://www.luogu.com.cn/problem/P4322 题目大意 nnn个点的一棵树&#xff0c;每个节点有一个(si,pi)(s_i,p_i)(si​,pi​)&#xff0c;选择一个点必须选择它的父节点&#xff0c;求选择KKK个点使得∑pxi∑sxi\frac{\sum p_{x_i}}{\sum s_{x_i}}∑sxi​​∑px…

【DP】平铺方案(ybtoj DP-1-5)

平铺方案 ybtoj DP-1-5 题目大意 求用121\times 212和222\times 222的瓦片平铺2n2\times n2n矩形的方案数 输入样例 2 8 12 100 200输出样例 3 171 2731 845100400152152934331135470251 1071292029505993517027974728227441735014801995855195223534251数据范围 0⩽n⩽2…

白兔的字符串

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 白兔有一个字符串T。白云有若干个字符串S1,S2…Sn。 白…

利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop

Aop即是面向切面编程&#xff0c;众多Aop框架里Castle是最为人所知的&#xff0c;另外还有死去的Spring.NET&#xff0c;当然&#xff0c;.NET Core社区新秀AspectCore在性能与功能上都非常优秀&#xff0c;已经逐渐被社区推崇和有越来越多的人使用。感谢柠檬同学的礼物&#x…

P6348-[PA2011]Journeys【线段树优化建图,最短路】

正题 题目链接:https://www.luogu.com.cn/problem/P6348 题目大意 nnn个点的一张图&#xff0c;mmm条边表示区间[a,b][a,b][a,b]向区间[c,d][c,d][c,d]连边&#xff0c;求单源最短路。 解题思路 线段树优化建图的裸题&#xff0c;但是不能直接让线段树上的点两两建边&#xf…

[XSY] 简单的博弈题(博弈+dp+组合数+容斥)

简单的博弈题 对于贪心的对手&#xff0c;显然用最大的一半和他最小的一半比较判断是否全胜。&#xff08;这不就是田忌赛马吗&#xff09; 对于随机的对手&#xff0c;先考虑暴力怎么做&#xff1a; void check(int x,int w){if(x>m){res(w>m/21);return;}for(int i1;…

【矩阵乘法】沼泽鳄鱼(ssl 2511)

沼泽鳄鱼 ssl 2511 题目大意 给你一个无向图&#xff0c;有一些鳄鱼有周期性地在这个图中走&#xff08;鳄鱼不用沿着边走&#xff0c;周期为2或3或4&#xff09;&#xff0c;问你从初始点走到最终点走k个单位时间&#xff0c;不在点和边上停下&#xff0c;不在同一时间和鳄…

Matrix(二维hash)

题目链接 文章目录题目描述题意&#xff1a;题解代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 给定一个M行N列的01矩阵&#xff08;只包含数字0或1的矩阵&am…

当我们谈高性能时,我们谈些什么?(送书活动)

网站越快&#xff0c;用户的黏性就越高&#xff1b;网站越快&#xff0c;用户忠诚度更高&#xff1b;网站越快&#xff0c;用户转化率越高。简言之&#xff0c;速度是关键。——《Web 性能权威指南》显然&#xff0c;高性能意味着“快”。但对快的定义&#xff0c;在不同的系统…