您的位置:首页 > 其它

洛谷 3932 Chtholly!

2017-10-31 16:55 239 查看


洛谷上居然有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
,b
,d
,w
,dw
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: