ACDream - Sum
先上题目:
Problem Description
给出N,a[1]... a[N],还有M,b[1]... b[M]
long long ans = 0;
for(int i = 1; i <= N; i ++)
for(int j = 1; j <= M; j ++)
ans += abs(a[i] - b[j]) * (i - j);
Input
多组数据,每组数据
第一行N,M(1 <= N,M <= 50000)
第二行N个数字,a[1].. a[N]
第三行M个数字,b[1]..b[M]
(1 <= a[i],b[i] <= 10000)
Output
Sample Input
4 4
1 2 3 4
5 6 7 8
Sample Output
-40
Hint
/*
* this code is made by sineatos
* Problem: 1174
* Verdict: Accepted
* Submission Date: 2014-08-01 12:08:56
* Time: 2488MS
* Memory: 3240KB
*/
#include <cstdio>
#include <cstring>
#include <utility>
#include <algorithm>
#define MAX 50002
#define ll long long
using namespace std; typedef pair<int,int> pii; pii a[MAX],b[MAX];
int n,m;
ll sumb[MAX],sumbj[MAX],sumj[MAX];
int loc[MAX]; inline ll Sum(int i,int r,int l){
ll sum=;
sum=(ll)a[i].first*a[i].second*(r+-l) - (ll)a[i].first*(sumj[r]-sumj[l-]) -(ll)a[i].second*(sumb[r]-sumb[l-]) + (sumbj[r]-sumbj[l-]);
return sum;
} int main()
{
ll sum;
//freopen("data.txt","r",stdin);
while(scanf("%d %d",&n,&m)!=EOF){
for(int i=;i<=n;i++){
scanf("%d",&a[i].first);
a[i].second=i;
}
for(int i=;i<=m;i++){
scanf("%d",&b[i].first);
b[i].second=i;
}
sort(a+,a+n+);
sort(b+,b+m+);
sumb[]=sumbj[]=sumj[]=;
int k=;
for(int i=;i<=n;i++){
while(k<=m && a[i].first>=b[k].first) k++;
loc[i]=k;
}
for(int i=;i<=m;i++){
sumb[i]=sumb[i-]+b[i].first;
sumbj[i]=sumbj[i-]+(ll)b[i].first*b[i].second;
sumj[i]=sumj[i-]+b[i].second;
}
sum=;
for(int i=;i<=n;i++){
int mid=loc[i];
ll p1=Sum(i,m,mid);
ll p2=Sum(i,mid-,);
sum+=p2-p1;
}
printf("%lld\n",sum);
}
return ;
}
/*Sum*/
ACDream - Sum的更多相关文章
- acdream Divide Sum
Divide Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitSta ...
- acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy
GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...
- acdream 1154 Lowbit Sum
先贴代码,以后再写题解... 首先,直接枚举肯定是会超时的,毕竟n就有10^9那么多... 对于每个数,我们先把它转化为二进制:例:21-->10101: 对于00001~10101,可以分为几 ...
- ACdream: Sum
Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisticN ...
- acdream 1431 Sum vs Product
Sum vs Product Time Limit: 4000/2000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...
- ACdream 1431——Sum vs Product——————【dfs+剪枝】
Sum vs Product Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...
- ACDream - Power Sum
先上题目: Power Sum Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...
- ACDream - Lowbit Sum
先上题目: C - Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...
- ACdream 1154 Lowbit Sum (数位DP)
Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitSt ...
随机推荐
- RDA 搜台
转载马斯特·李 流程: 将channel的读写回调在AL_FW_Init中注册 初始化datasaving部件,注册datasaving的回调,并建立DATASAVING_NvmStore_Threa ...
- 特征变化--->特征向量中部分特征到类别索引的转换(VectorIndexer)
VectorIndexer: 倘若所有特征都已经被组织在一个向量中,又想对其中某些单个分量进行处理时,Spark ML提供了VectorIndexer类来解决向量数据集中的类别性特征转换. 通过为其提 ...
- 客户端JavaScript基础 网页上的输入输出
创建: 2017/10/06 完成: 2017/10/07 更新: 2017/10/15 增加了通过事件监听器登陆事件的方法的链接 # TODO: 补充 基于Canvas的图象 客户端Java ...
- Network(Tarjan+LCA)
http://poj.org/problem?id=3417 元宵节+情人节晚上刷的题,纪念一下.. 题意:给出n个点,m条边,然后Q个询问,每次询问输入一条边,输出加入此边后桥的个数.. #incl ...
- js产生随机数教程
<script> function GetRandomNum(Min,Max){ var Range = Max - Min; var Rand = Math.random() ...
- hdu5698瞬间移动(组合数,逆元)
瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- 洛谷P1396营救(最小生成树)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...
- $P3931 SAC E一道难题 Tree$
problem #include <bits/stdc++.h> #define rep(i,j,n) for(register int i=j;i<=n;i++) #define ...
- 【BZOJ3328】PYXFIB(数学)
什么都不会的数学蒻菜瑟瑟发抖--Orz橙子(和兔子) 题目: BZOJ3328 分析: 橙子给我安利的数学题--(然后我就看着他因为矩阵乘法多模了一次卡了一天常数qwq表示同情) 先考虑一个子问题:求 ...
- mysql数据的操作
一.插入数据记录 1.插入完整数据记录 INSERT INTO table_name VALUES(value1,value2......valuen); 2.插入数据记录的一部分 INSERT IN ...