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. 在python中使用正则表达式(一)

    在python中通过内置的re库来使用正则表达式,它提供了所有正则表达式的功能. 一.写在前面:关于转义的问题 正则表达式中用“\”表示转义,而python中也用“\”表示转义,当遇到特殊字符需要转义 ...

  2. CSharp 案例:用 Dynamic 来解决 DataTable 数值累加问题

    需求说明 给定一个 DataTable,如果从中取出数值类型列的值并对其累加? 限制:不知该列是何种数值类型. 解决方案 1.将表转换为 IEnumerable<dynamic>,而后获取 ...

  3. Express4.x API (三):Response (译)

    Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 完成 Express4.x API (二):request (译) -- 完成 ...

  4. Visual Studio 2019 Serial Keys

    Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional NYWVH-HT ...

  5. Unity接入Steamworks

    一.将scrpts/Steamworks.net/SteamManager组件添加到游戏物体上 二.修改SteamManager的代码为游戏的id如图所示 三.Unity,打开项目根目录,修改stea ...

  6. RSA加密算法深入篇

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

  7. 12.26daily_scrum

    尽管最近是众多大作业集中爆发deadline的紧要关头,队员们依旧热情高涨,投入良多,纷纷为产品发布出谋划策. 具体工作: 小组成员 今日任务 工作时间 李睿琦 软件调试过程总结 2 左少辉 滑锁密码 ...

  8. HDOJ2099_整数的尾数

    一道我以为不会这么简单,然后暴力盲打竟然给过了的题. HDOJ2099_整数的尾数 #include<stdio.h> #include<stdlib.h> #include& ...

  9. Quartz应用与集群原理分析

    Quartz在CRM中的应用场景: https://tech.meituan.com/mt-crm-quartz.html https://www.mtyun.com/library/mt-crm-q ...

  10. OpenCV Code: Operations on Mat element

    cv::Mat img = cv::imread("image.jpg"); Method 1: img.at<uchar>(i, j, k) Method 2: im ...