P2345 奶牛集会

题目背景

MooFest, 2004 Open

题目描述

约翰的N 头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很

多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的。奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi − Xj | 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力。假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。

输入输出格式

输入格式:

• 第一行:单个整数N,1 ≤ N ≤ 20000

• 第二行到第N + 1 行:第i + 1 行有两个整数Vi 和Xi,1 ≤ Vi ≤ 20000; 1 ≤ Xi ≤ 20000

输出格式:

• 单个整数:表示所有奶牛产生的音量之和


对于这个题,要求的即为 \(\sum_{i=1}^n V_i*\sum_{V_j<V_i} |x_i-x_j|\)

对于音量\(V\),我们可以排序来做以消除影响。

但对于带绝对值的距离,就不太好处理了。

我们考虑去掉绝对值。

\(\sum_{i=1}^n V_i*(\sum_{V_j<V_i,x_i>x_j} (x_i-x_j)*\sum_{V_j<V_i,x_i<x_j} (x_j-x_i))\)

\(\Rightarrow \sum_{i=1}^n( V_i*(\sum_{ V_j<V_i,x_i<x_j }x_j )-V_i*(\sum_{ V_j<V_i,x_i>x_j }x_j )+x_i*(k_1-k_2) )\)(其中,\(k_1\)存储位置在\(x_i\)左边的点的个数,\(k_2\)右边)

我们使用两个树状数组\(c1\)和\(c2\)分别维护\(1\)$n$的坐标之和,和$1$\(n\)的点的个数。其中\(1\)~\(n\)表示按位置离散化的值。

我们将\(v\)从小到大排序并将这个点加入树状数组即可。


code:

#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std;
const ll N=20010;
ll c1[N],c2[N];//奶牛个数,奶牛距离和
ll n;
struct node
{
ll x,v,i;
bool friend operator <(node n1,node n2)
{
return n1.x<n2.x;
}
}cow[N],d[N];
bool cmp(node n1,node n2)
{
return n1.v<n2.v;
} void change(ll i,ll delta)
{
while(i<=n)
{
c1[i]++;
c2[i]+=delta;
i+=i&-i;
}
} ll x_query(ll i)
{
ll x=0;
while(i)
{
x+=c2[i];
i-=i&-i;
}
return x;
} ll c_query(ll i)
{
ll c=0;
while(i)
{
c+=c1[i];
i-=i&-i;
}
return c;
}
ll ans=0;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&cow[i].v,&cow[i].x);
sort(cow+1,cow+1+n);
for(int i=1;i<=n;i++)
cow[i].i=i;
for(int i=1;i<=n;i++)
{
d[cow[i].i].i=i;
d[cow[i].i].v=cow[i].v;
d[cow[i].i].x=cow[i].x;
}
sort(d+1,d+1+n,cmp);
for(int i=1;i<=n;i++)
{
ans+=d[i].v*(x_query(n)-2*x_query(d[i].i)+(2*c_query(d[i].i)-c_query(n))*d[i].x);
change(d[i].i,d[i].x);
}
printf("%lld\n",ans);
return 0;
}

2018.6.2

洛谷 P2345 奶牛集会 解题报告的更多相关文章

  1. 洛谷P2345 奶牛集会

    题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚 ...

  2. 洛谷 P2345 奶牛集会

    https://www.luogu.org/problem/show?pid=2345 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅 ...

  3. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  4. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  5. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  6. 洛谷 P1108 低价购买 解题报告

    P1108 低价购买 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买&quo ...

  7. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  8. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

  9. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

随机推荐

  1. SpringCloud Eureka参数配置项详解(转)

    Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka的配置项做具体介绍,供大家参考. Eure ...

  2. python语言程序设计5

    1, 评估函数eval() 去掉参数最外侧引号并执行余下语句的函数. 比如eval("1"),经过运行可以得到数字 1 去得是单双引号,不是括号哦.. 广泛来说,能将任何字符串的形 ...

  3. Jumpserver双机高可用环境部署笔记

    之前在IDC部署了Jumpserver堡垒机环境,作为登陆线上服务器的统一入口.后面运行一段时间后,发现Jumpserver服务器的CPU负载使用率高达80%以上,主要是python程序对CPU的消耗 ...

  4. nginx日志格式字段

    Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志 访问日志主要记录 ...

  5. part 1

    注意:本次源码分析选择2.0.3(因为不支持IE6.7.8,就少了很多兼容的hack的写法,对了解jQuery的实现原理有很大的帮助) 1.jQuery有不同的版本,从2.x版本便不再支持IE6.7. ...

  6. Some questions after Reading 《移山之道》

    很少见到用故事的形式来写技术书籍的,这是我看到的第一本,书写得比较有趣,看了之后也是有一定的收获.  作者在此书中旁征博引,引用的东西虽不能一个一个查询是否正确,但是每次读到时候,感觉一种现代的软件工 ...

  7. 20135218 实践四 ELF文件格式分析

    一 :概述 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目标文件)格式主要三种: (1)可重定向文件:文 ...

  8. android开发之图表

    在这里使用的插件为Mpchart,只以折线图为例.首先需要导入

  9. js 基础-&& || 逻辑与和逻辑或

    今天百度发现一个简化长if   else if 语句的方法,看起来及其强大,感觉这样虽然对系统性能提升没有帮助但是代码更简练了,分析了一番,下面先说说自己学到的理论. 首先要弄清楚js 中对于 变量, ...

  10. 剑值offer:最小的k个数

    这是在面试常遇到的topk问题. 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解题思路: 思路一:用快排对数 ...