洛谷 3932 Chtholly!

来源:互联网 发布:java web项目重新编译 编辑:程序博客网 时间:2024/06/05 15:40

这里写图片描述
洛谷上居然有Chtholly 的题,不刷完我都不好意思说自己是珂学家!
如果有天你去到斯卡布罗集市,请代我向世界上最幸福的女孩问好。

题目描述:

有一天小妖精们又在做游戏。这个游戏是这样的。

妖精仓库的储物点可以看做在一个数轴上。每一个储物点会有一些东西,同时他们之间存在距离。

每次他们会选出一个小妖精,然后剩下的人找到区间[l,r][l,r]储物点的所有东西,清点完毕之后问她,把这个区间内所有储物点的东西运到另外一个仓库的代价是多少?

比如储物点ii有xx个东西,要运到储物点jj,代价为

x \times \mathrm{dist}( i , j )x×dist(i,j)
dist就是仓库间的距离。

当然啦,由于小妖精们不会算很大的数字,因此您的答案需要对19260817取模。

输入输出格式

输入格式:
第一行两个数表示n,mn,m
第二行n-1n−1个数,第ii个数表示第ii个储物点与第i+1i+1个储物点的距离

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

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

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

输出格式:
对于每个询问输出一个数表示答案

输入输出样例

输入样例#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
输出样例#1: 复制
125
72
9
0
70
说明

对于30%的数据,n , m \le 1000n,m≤1000
对于另外20%的数据,所有储物点间的距离都为1

对于另外20%的数据,所有储物点的物品数都为1

对于100%的数据 , n , m \le 200000 ; a_i , b_i <= 2\cdot 10^9n,m≤200000;a

分析:把式子拆开不难看出可以前缀和优化,于是预处理,然后随便搞搞。注意一定取mod要勤快,能取的地方都取,这样很稳。

# include <iostream># include <cstdio># include <cmath># include <list># include <cstring># include <map># include <ctime># include <algorithm># include <queue>using namespace std;typedef long long ll;int read(){    register int f=1,i=0;char ch=getchar();    while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}    while(ch>='0'&&ch<='9') {i=(i<<3)+(i<<1)+ch-'0';ch=getchar();}    return f*i;}const int N=200005;const int mod=19260817;ll a[N],b[N],d[N],w[N],dw[N];int n,m,l,r,x; inline ll MIU(int l,int r){    return (d[r]%mod-d[l-1]%mod+mod)%mod;}inline ll MIUS(int l,int r){    return (dw[r]%mod-dw[l-1]%mod+mod)%mod;}int main(){    freopen("lx.in","r",stdin);    n=read(),m=read();    for(int i=2;i<=n;++i) a[i]=read(),a[i]=(a[i]%mod+a[i-1])%mod;    for(int i=1;i<=n;++i) b[i]=read(),w[i]=b[i]*a[i];    for(int i=1;i<=n;++i) d[i]=(d[i-1]+b[i])%mod,dw[i]=(dw[i-1]+w[i])%mod;    for(int i=1;i<=m;++i)    {        x=read(),l=read(),r=read();        if(x<=l){cout<<(MIUS(l,r)-MIU(l,r)*a[x]%mod+mod)%mod<<endl;continue;}        if(x>=r){cout<<(MIU(l,r)*a[x]%mod-MIUS(l,r)+mod)%mod<<endl;continue;}        if(x>l&&x<r){cout<<((a[x]*(MIU(l,x-1)-MIU(x+1,r)+mod)%mod)%mod+        (MIUS(x+1,r)-MIUS(l,x-1)+mod)%mod)%mod<<endl;continue;}    }    return 0;}
原创粉丝点击