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 ...
随机推荐
- bzoj2780
AC自动机+树链剖分+线段树/树状数组+dfs序+树链的并 题意:给出n个母串和q个询问串,对于每个询问串输出有多少个母串包含这个询问串 N=∑|母串|<=10^5 Q=∑|询问串|<=3 ...
- sql 语句NVL()用法
一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的 ...
- EF--DBFirst
EF框架有三种基本的方式:DB First,Model First,Code First.这里简单的说一下DB First,适合没有基础的同学照着做,学习基础的东西. DatabaseFirst就是围 ...
- sqlyog注册码激活
姓 名(Name):ttrar 序 列 号(Code):8d8120df-a5c3-4989-8f47-5afc79c56e7c 或者(OR) 姓 名(Name):ttrar 序 列 ...
- Kafka的3节点集群详细启动步骤(Zookeeper是外装)
首先,声明,kafka集群是搭建在hadoop1.hadoop2和hadoop3机器上. kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载.安装和配置(图文详细教程)绝对干货 如下分 ...
- Unicode gbk gb2312 编码问题 [转载]
原文地址: http://www.cnblogs.com/csn0721/archive/2013/01/24/2875613.html HTML5 UTF-8 中文乱码 <!DOCTYPE ...
- Moto P30(XT1943-1) 免解锁BL 免rec 保留数据 Magisk Xposed ROOT 救砖 ZUI 4.0.374
>>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...
- [Android]异常5-throwable:java.lang.OutOfMemoryError: pthread_create
背景:线程初始化耗时任务 异常原因: 可能一>多个new Thread()嵌套 解决办法有: 解决一>使用Handler分离new Thread()嵌套 注: 06-30 09:12:26 ...
- Android HTTP 数据提交
在Android 项目中,使用HTTP协议获取数据或者处理数据,需要使用到多线程和配置相应的APP权限 1.使用线程,使用HTTP 提交数据 private Thread submitThread = ...
- JDBC链接数据库步骤
java中定义链接数据库的标准:JDBC 1.导包:不同数据库有不同的jdbc驱动包,而且jdbc驱动包和数据库版本必须对应 2.测试 3.写代码 try { 1.//加载JDBC驱动 Clas ...