B.储物点的距离

时间限制: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

 1 #include<stdio.h>
 2 #define mod 1000000007
 3 long long a[300000],d[300000],A[300000],D[300000];
 4 int main()
 5 {
 6     long long N,M;
 7     scanf("%lld%lld",&N,&M);
 8     for(int i=2;i<=N;i++)
 9     {scanf("%lld",&d[i]);d[i]=(d[i]+d[i-1])%mod;}
10     for(int i=1;i<=N;i++)
11     {
12         scanf("%lld",&a[i]);
13         A[i]=(a[i]+A[i-1])%mod;
14         D[i]=(a[i]%mod*d[i]%mod+D[i-1])%mod;
15     }
16     long long x,l,r;
17     while(M--)
18     {
19         scanf("%lld%lld%lld",&x,&l,&r);
20         long long ans,ans1;
21         if(x<=l) ans=(D[r]-D[l-1]+mod)%mod-d[x]*(A[r]-A[l-1]+mod)%mod;
22         else if(x>=r)
23         {
24             ans=d[x]*(A[r]-A[l-1]+mod)%mod-(D[r]-D[l-1]+mod)%mod;
25         }
26         else
27         {
28             ans=d[x]*(A[x]-A[l-1]+mod)%mod-(D[x]-D[l-1]%mod)%mod;
29             ans1=(D[r]-D[x-1]+mod)%mod-d[x]*(A[r]-A[x-1]%mod)%mod;
30             //if(ans1<0) ans1=-ans1;
31             //if(ans<0) ans=-ans;
32             ans=(ans1+ans)%mod;
33         }
34         printf("%lld\n",(ans+mod)%mod);
35     }
36     return 0;
37 }

时间: 2024-09-20 19:29:04

B.储物点的距离的相关文章

[Luogu3932] 浮游大陆的68号岛

题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg 浮游大陆的68号岛,位于浮游大陆的边境地带.平时很少有人造访. 岛上被浓厚的森林覆盖. 在这座边境地区不起眼的浮游岛上,建立着神秘的”兵器“管理仓库——妖精仓库. 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无虑的,幼体的黄金妖精们过着天真烂漫的生活,自然也无暇考虑

计算两点间的距离

计算两点间的距离 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 208295    Accepted Submission(s): 72641 Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y

百度距离谷歌何止一个太平洋的距离

作为一个程序员,如果不使用谷歌,那么你所查阅的资料几乎完全相同. 百度和谷歌何止一个太平洋的距离. 首先就是广告,百度现在的广告已经达到了让人无法忍受的地步了.你键入关键字进行搜索,出来的第一个或前几个答案都是百度推广的,都是非所答的结果. 先说说技术上: 作者:Kenny Chao 链接:http://www.zhihu.com/question/22447908/answer/21435705 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 搜索引擎需要对抓

学术休假期 项目4-点和距离

问题及代码: 读程序,写出函数的定义,注意其中枚举类型的用法 /* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:点和距离.cpp *作 者:冷基栋 *完成日期:2015年2月26日 *版 本 号:v1.0 */ #include <iostream> #include <Cmath> using namespace std; enum SymmetricStyle {axisx,axisy,point}

csu 1503: 点到圆弧的距离-湖南省第十届大学生计算机程序设计竞赛

就是--判断p与圆心的连线与圆的交点在不在圆弧上,在就是它到p的距离,不在就是p跟端点的最短距离 #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector>

捷尔特电动车与骗子保持距离e

解放后,由于刘大肚既是大地主又是资本家,那可是典型的剥削阶级,被限制了人身自由,那是大会批了小会批,在一次运动中,政府发动贫下中农诉苦,作为被剥削阶级代表,孙大春被迫说了几句对刘大肚不利的话,(其实是当时工作组的组长逼迫他这样说的,如果不这样说,就把他家的成分变成富农,那哪能行呢,划成了富农,后代上学当兵都成问题.)这可不得了,有人作证了,为此,刘大肚被连着游斗了几天,最后终于无法忍受折磨,在一个风雨交加的夜里上吊自尽了.当时,刘有根还在省城读书,也受牵连被学校开除了.刘有根是何等的聪明啊,他服

mysql 下 计算 两点 经纬度 之间的距离

公式如下,单位米: 第一点经纬度:lng1 lat1 第二点经纬度:lng2 lat2 round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000) 例如: SELECT store_id,lng,lat, ROUND(6378.13

5-7 点到原点的距离(多态)

给出下面的一个基类框架: class Point { protected: int dimension;//点的维数,最多不超过100维 private: int point_length[100]://点数组 public: Point ();//构造函数根据需要重载 float distance( );//计算当前点到原点的距离 void display();//输出点 } 以Point为基类建一个派生类Point_2D,增加以下数据成员: float x;//2D平面上点的x坐标 floa

利用结构类型的相关知识计算两点之间的距离

#include<stdio.h>#include<stdlib.h>#include<math.h> struct point{ /*点的结构类型名*/ float x; /*横坐标*/ float y; /*纵坐标*/ }; struct point readPoint(); /*函数原型声明*/float distance(struct point p1,struct point p2);/*主函数*/ int main(void){ struct point a