• 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
    ",(ans+mod)%mod);
    35     }
    36     return 0;
    37 }
    View Code

    作者:ACRykl —— O ever youthful,O ever weeping!

    出处:http://www.cnblogs.com/ACRykl/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    网路连接出现意外错误
    linux install oracle jdk
    Chrome开发者工具详解(一)之使用断点来调试代码上
    jQuery对象与DOM对象的相互转换
    Velocity学习(二)之语法
    vscode学习(一)之vscode开发中绝对让你惊艳的插件!!!(个人在用) 持续更新。。。。
    css3新属性box-orient
    使用css控制文字显示几行并且剩余部分隐藏(移动端和PC端同样适用)
    移动端实现横滑
    移动端实1px细线方法
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8068087.html
Copyright © 2020-2023  润新知