题目大意:有n头牛,第i头牛声调为v[i],坐标为x[i],任意两值牛i,j沟通所需的花费为abs(x[i]-x[j])*max(v[i],v[j]),求所有牛两两沟通的花费。

分析:

我们将奶牛按声调升序排列,然后从前往后计算,由于奶牛i前面的奶牛声调都比它小,则最大声调被确定为v[i],然后只要计算之前所有奶牛与该奶牛距离即可。

如何快速求出距离和?可以知道对于奶牛j,当它比奶牛i靠左时,其距离为(x[i]-x[j]),前面所有比i靠左的奶牛与奶牛i距离和为∑(x[i]-x[j])然而它也就是∑x[i]-∑x[j],前面一项等于x[i]*(左边奶牛个数),后一项就是左边奶牛坐标数值和,两者相减的到结果要乘v[i],右边的情况也一样,左右两边相加,就是这头牛与比它小的奶牛的花费,把每头牛的总花费加起来就是结果。

代码:

program fest;
var
bit:array[..,..]of int64;
v,x:array[..]of int64;
n,m,s,a,b,t,g,ans:int64; i:longint;
procedure qsort(l,h:longint);
var i,j,t,m:longint;
begin i:=l; j:=h;
m:=v[(i+j) div ];
repeat
while v[i]<m do inc(i);
while m<v[j] do dec(j);
if i<=j then
begin t:=v[i]; v[i]:=v[j]; v[j]:=t;t:=x[i]; x[i]:=x[j]; x[j]:=t;
inc(i); dec(j); end; until i>j;
if i<h then qsort(i,h); if j>l then qsort(l,j); end;
procedure add(l,i,k:longint);
begin
while i<=m do
begin
inc(bit[l,i],k); inc(i,i and (-i));
end;
end;
function query(l,i:longint):int64;
var s:longint;
begin
s:=;
while i> do
begin
inc(s,bit[l,i]); dec(i,i and (-i));
end;
exit(s);
end;
begin
assign(input,'fest.in');
reset(input);
assign(output,'fest.out');
rewrite(output);
readln(n);
for i:= to n do
begin readln(v[i],x[i]); if x[i]>m then m:=x[i]; end;
qsort(,n);
for i:= to n do
begin
a:=query(,x[i]); b:=query(,x[i]); s:=a*x[i]-b;
t:=query(,m)-a; g:=query(,m)-b; inc(s,g-x[i]*t);
inc(ans,v[i]*s);
add(,x[i],); add(,x[i],x[i]);
end;
writeln(ans);
close(input); close(output);
end.

POJ 1990:MooFest(树状数组)的更多相关文章

  1. POJ 1990 MooFest --树状数组

    题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i],v[j])*dist(i,j)的音量.求所有两两头牛交谈时音量总和∑(max(v[i],v[j])*abs(x[j]-x[i])) ,x ...

  2. poj 2229 Ultra-QuickSort(树状数组求逆序数)

    题目链接:http://poj.org/problem?id=2299 题目大意:给定n个数,要求这些数构成的逆序对的个数. 可以采用归并排序,也可以使用树状数组 可以把数一个个插入到树状数组中, 每 ...

  3. POJ 2299 【树状数组 离散化】

    题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...

  4. poj 2155 Matrix (树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16797   Accepted: 6312 Descripti ...

  5. poj 3067 - Japan(树状数组)

    先按第一个数从大到小排序,相等的情况下,第二个数按照从大到小排序..... 预处理后,照着树状数组写就行了... 注意:k的最大值应取1000*1000 代码如下: include <cstdi ...

  6. poj 2481 - Cows(树状数组)

    看的人家的思路,没有理解清楚,,, 结果一直改一直交,,wa了4次才交上,,, 注意: 为了使用树状数组,我们要按照e从大到小排序.但s要从小到大.(我开始的时候错在这里了) 代码如下: #inclu ...

  7. POJ 3468(树状数组的威力)

    之前说过这是线段树的裸题,但是当看了http://kenby.iteye.com/blog/962159 这篇题解后我简直震惊了,竟然能如此巧妙地转化为用树状数组来处理,附上部分截图(最好还是进入原网 ...

  8. POJ 2352 【树状数组】

    题意: 给了很多星星的坐标,星星的特征值是不比他自己本身高而且不在它右边的星星数. 给定的输入数据是按照y升序排序的,y相同的情况下按照x排列,x和y都是介于0和32000之间的整数.每个坐标最多有一 ...

  9. POJ 2182【树状数组】

    题意: 每头牛有编号,他们乱序排成一排,每头牛只知道前边比自己序号小的有几位. 思路: 递推,最后一只牛的编号是确定的,然后不断进行区间更新,直到找到某个空位前方恰好有n个空位. 这题跟某道排队的题思 ...

  10. POJ 2309 BST 树状数组基本操作

    Description Consider an infinite full binary search tree (see the figure below), the numbers in the ...

随机推荐

  1. NOIP2018赛前停课集训记——最后的刷板子计划

    前言 再过两天就\(NOIP2018\)了. 于是,我决定不做其他题目,开始一心一意刷板子了. 这篇博客记录的就是我的刷板子计划. [洛谷3383][模板]线性筛素数 这种普及-的题目我还写挂了两次( ...

  2. python_14_sys_mod

    import sys #1 print(sys.path)#打印环境变量 #2 print(sys.argv)#打印相对路径 print(sys.argv[2])#在cmd命令窗口运行本文件

  3. 【Python】bytes和hex字符串之间的相互转换。

    反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换,记录在这里吧. 1. 在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转 ...

  4. numpy.random.shuffle(x)的用法

    numpy.random.shuffle(x) Modify a sequence in-place by shuffling its contents. Parameters: x : array_ ...

  5. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第八节

    原文链接 第八节:利用CUDA函数库 Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实验室进 ...

  6. 对于无法激活的系统—使用rearm命令延长试用期

    1.首先安装后,有一个30天的使用期. 2.在30天试用期即将结束时,用rearm命令后重启电脑,剩余时间又回复到30天.微软官方文档中声明该命令只能重复使用3次,也说是说总共可以免费体验120天. ...

  7. 大蟒蛇肚子的"风暴"

    遇到了数据库连接数不足的问题,一般情况下会预留一些会话增加的情况,但在一些特殊情况下如连接风暴(logon storm), 如果在监听中没有做rate限流,对数据库来说巨大的冲击可能会导致数据库Han ...

  8. 4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍

    4- vue django restful framework 打造生鲜超市 -restful api 与前端源码介绍 天涯明月笙 关注 2018.02.20 19:23* 字数 762 阅读 135 ...

  9. 二十九、MySQL 序列使用

    MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 本章我们将介绍 ...

  10. 怎样查看web软件例如apache的连接数

    查看连接总数和当前的连接数 netstat -ant | grep $ip:80 | wc -l netstat -ant | grep $ip:80 | grep EST | wc -l 查看IP访 ...