zoukankan      html  css  js  c++  java
  • 牛客 储物点的距离(前缀和)

    写出式子后前缀和乱搞

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int N=3e5+10;
    const int mod=1000000007;
    ll a[N],b[N];
    ll s[N];
    ll pos[N];
    ll c[N];
    int cal1(int x,int l,int r){
        ll res=0;
        ll tmp=s[r]-s[l-1];
        tmp=tmp%mod*pos[x]%mod;
        return (c[r]-c[l-1]-tmp+mod+mod)%mod;
    }
    int cal2(int x,int l,int r){
        ll res=0;
        ll tmp=s[r]-s[l-1];
        tmp=tmp%mod*pos[x]%mod;
        return (tmp-(c[r]-c[l-1])+2*mod)%mod;
    }
    int main(){
        int n,m;
        cin>>n>>m;
        int i;
        for(i=2;i<=n;i++){
            scanf("%lld",&a[i]);
            pos[i]=(pos[i-1]+a[i])%mod;
        }
        for(i=1;i<=n;i++){
            scanf("%lld",&b[i]);
            s[i]=(s[i-1]+b[i])%mod;
            c[i]=(c[i-1]+b[i]*pos[i])%mod;
    
        }
        while(m--){
            int l,r,x;
            scanf("%d%d%d",&x,&l,&r);
            if(x<=l){
                int ans=0;
                ans=cal1(x,l,r);
                printf("%d
    ",ans%mod);
            }
            else if(x>=r){
                int ans=0;
                ans=cal2(x,l,r);
                printf("%d
    ",ans%mod);
            }
            else{
                int ans=0;
                ans=cal1(x,x,r)+cal2(x,l,x);
                printf("%d
    ",ans%mod);
    
            }
        }
    }
    View Code
  • 相关阅读:
    js秒换成天时分
    vuex
    匹配iPhoneX
    ASP 解析json
    WPF 实现多语言支持
    c# 用DotNetZip来解压/压缩文件
    WPF UI Close button
    VB 获取所有窗体菜单信息
    ASP/ASP.NET/VB6文件上传
    c# 上传图片到一个外链相册服务器
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12907428.html
Copyright © 2011-2022 走看看