题目大意:一群牛参加完牛的节日后都有了不同程度的耳聋,第i头牛听见别人的讲话,别人的音量必须大于v[i],当两头牛i,j交流的时候,交流的最小声音为max{v[i],v[j]}*他们之间的距离。现在有n头牛,求他们之间两两交流最少要的音量和。

解题思路:先将v按从小到大排序,这样对于vi,那么vi之前的牛所交流的声音就是vi,vi很好确定,但关键就是怎么算距离了。我们可以用两个树状数组,一个维护vi之前有多少头牛距离比i小,另一个就是维护vi之前距离比i小的总距离。

那么就可以推出一个关系式:对于第i头牛,它对答案所做的贡献为(small * x - Xmin + Xmax - big * x)* vi ,其中small是比i距离小的个数,big是比i距离大的个数,Xmin是比i距离小的所有牛的总距离和,Xmax是比i距离大的所有牛的总距离和。

这道题自己推出来感觉好爽。。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;typedef __int64 LL;
const int maxn = 20005;
struct Node
{int x,v;
}cow[maxn];
struct Tree
{int n;LL c[maxn];void init(int n){this->n = n;memset(c,0,sizeof(c));}int lowbit(int x){return x & -x;}void update(int x,int d){while(x <= n){c[x] += d;x += lowbit(x);}}LL sum(int x){LL ans = 0;while(x > 0){ans += c[x];x -= lowbit(x);}return ans;}
}cnt,val;
int n,idx[maxn]; bool cmp1(Node a,Node b)
{return a.v < b.v;
}bool cmp2(Node a,Node b)
{return a.x < b.x;
}void discrete()
{int tot = 0;sort(cow+1,cow+1+n,cmp2);tot = 0;for(int i = 1; i <= n; i++){if(cow[i].x != cow[i-1].x)idx[cow[i].x] = ++tot;}sort(cow+1,cow+1+n,cmp1);
}int main()
{while(scanf("%d",&n)!=EOF){for(int i = 1; i <= n; i++)scanf("%d%d",&cow[i].v,&cow[i].x);discrete();cnt.init(n);val.init(n);LL ans = 0;for(int i = 1; i <= n; i++){ans += (cnt.sum(idx[cow[i].x]) * cow[i].x - val.sum(idx[cow[i].x])) * cow[i].v;ans += (val.sum(n) - val.sum(idx[cow[i].x]) - (cnt.sum(n) - cnt.sum(idx[cow[i].x])) * cow[i].x) * cow[i].v;cnt.update(idx[cow[i].x],1);val.update(idx[cow[i].x],cow[i].x);}printf("%I64d\n",ans);}return 0;
}

poj 1990 MooFest(转化成树状数组求和)相关推荐

  1. poj 3321 Apple Tree(dfs序+树状数组求和模型)

    题目链接:http://poj.org/problem?id=3321 解题思路: 先dfs求出序列,将子树转化到dfs序列的区间内,接下来就是简单的树状数组求和模型了.水题. #include< ...

  2. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

  3. poj 3321 Apple Tree 树状数组

    http://poj.org/problem?id=3321 一棵树,开始时每个结点都有一个苹果,输入C x表示更新x结点,若x结点有苹果,把该结点苹果摘掉,若该节点无苹果,在该节点上增加一个新的苹果 ...

  4. Housewife Wind POJ - 2763 倍增LCA+树状数组 或 树链剖分+线段树

    题目 链接:http://poj.org/problem?id=2763 Language:Default Housewife Wind Time Limit: 4000MS   Memory Lim ...

  5. POJ - 1990 (MooFest)

    题意:n 头牛,每头牛有两个属性值 耳聋程度 w 和坐标 x ( x保证互不相同 ),两头牛i,j可以联系的最低代价是 abs(xi-xj)*max(wi,wj),求所有牛相互联系的最低代价总和: 分 ...

  6. poj 2029 二维树状数组

    思路:简单树状数组 #include<map> #include<set> #include<cmath> #include<queue> #inclu ...

  7. POJ 2182 Lost Cows [树状数组+二分]

    Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...

  8. POJ 2483 Cows(树状数组)

    题目链接 题意 给出N个区间,求大于改区间的数目 AC 按照右区间降序排列,这样可以保证下一个区间的右端点小,这样树状数组就可以重复利用.树状数组存放的是以当前左区间到右区间一共有几个比自己大的区间, ...

  9. poj 3167(KMP+树状数组)

    之前自己在做题的时候在网上找别人的题解,虽然当时理解,但时间一久就忘了.所以开个这个东西来记录自己的学习进程,方便自己的回顾,以及给他人提供题解. 开始冲击明年高二的省选!不再颓废! 好了,下面进入正 ...

最新文章

  1. 爬虫之requests模块发送带header的请求
  2. ios 状态栏 覆盖自定义View
  3. 学习js权威指南第五站 ---- 数组
  4. 利用 :placeholder-shown 选择器实现 label 浮动效果
  5. case 语句不跳转,死循环
  6. Python 实用技巧之正则表达式查找和替换文本的操作方法
  7. 把东西从学校搬回来了
  8. mysql log stats_MySQL慢查询之pt-query-digest分析慢查询日志
  9. c语言 一个矩阵的乘积,c语言矩阵相乘
  10. 20190925:(经典算法系列)河内之塔
  11. PHP-php://(类型)访问各个输入/输出流以及全局变量$HTTP_RAW_POST_DATA讲解
  12. 围棋三番棋,得第二局得胜
  13. html前端论文参考文献,web前端论文参考文献
  14. 个人网站性能优化经历(6)网站安全方面优化
  15. connect holder is null问题记录
  16. Matlab似然比检验函数,似然比检验 LRT
  17. origin导出矢量图变色,怎么办?
  18. 网闸——安全隔离网闸:从第一代走向第二代
  19. 大数据云计算技术概述_云计算–概述,类型,优势和未来范围
  20. concurrent包

热门文章

  1. 重磅!神策数据游戏行业解决方案全面上线,速来围观
  2. 「神策客景」全面升级,懂客户,更懂你
  3. 人工智能缺陷与误觉:让机器产生幻觉的「怪异事件」 1
  4. Spring Boot WebFlux-02——WebFlux Web CRUD 实践
  5. JavaScript强化教程——AJAX
  6. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world...
  7. 记一次not in 和 minus的优化
  8. jqPlot图表插件使用说明(一)
  9. DebootstrapChroot
  10. 希望找到计算机系的好期刊的影响因子的排序?并作为选刊依据?选SJR就足够了