http://poj.org/problem?id=1990

题目大意:定义一对在树轴上的点,每对点产生的值为两点权值最大值*两点距离,求点对值和。

显然n*n复杂度不行,我们需要用树状数组维护两个东西。

对于某位置,一个是它和它前置位坐标和,一个是它和它前置位点的个数。

我们按照点i权值v从小到大排序添加,这样对于我们在树状数组里的点,我们一定是要乘当前的点的v,剩下的就是乘距离了。

对于坐标比它小的点的个数为num,坐标和为x,我们有答案num*x[i]-x。

同理对于坐标比它大的点也可以求,化简得到:

ans+=c[i].v*(querydis(N)-2*querydis(c[i].x)-(i-1-2*querynum(c[i].x))*c[i].x);

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
inline ll read(){
int X=,w=; char ch=;
while(ch<''||ch>''){w|=ch=='-';ch=getchar();}
while(ch>=''&&ch<='')X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
const int N=;
struct cow{
int v;
int x;
}c[N];
bool cmp(cow a,cow b){
return a.v<b.v;
}
int n,m;
ll num[N],dis[N];
inline int lowbit(int t){return t&(-t);}
void add(int x,int y1,int y2){
for(int i=x;i<=N;i+=lowbit(i)){num[i]+=y1;dis[i]+=y2;}
return;
}
ll querydis(int x){
ll res=;
for(int i=x;i>;i-=lowbit(i))res+=dis[i];
return res;
}
ll querynum(int x){
ll res=;
for(int i=x;i>;i-=lowbit(i))res+=num[i];
return res;
}
int main(){
n=read();
for(int i=;i<=n;i++){
c[i].v=read();
c[i].x=read();
}
sort(c+,c+n+,cmp);
ll ans=;
for(int i=;i<=n;i++){
ans+=c[i].v*(querydis(N)-*querydis(c[i].x)-(i--*querynum(c[i].x))*c[i].x);
add(c[i].x,,c[i].x);
}
printf("%lld\n",ans);
return ;
}

POJ1990:MooFest——题解的更多相关文章

  1. POJ1990 MooFest

    嘟嘟嘟 题目大意:一群牛参加完牛的节日后都有了不同程度的耳聋(汗……),第i头牛听见别人的讲话,别人的音量必须大于v[i],当两头牛i,j交流的时候,交流的最小声音为max{v[i],v[j]}*他们 ...

  2. MooFest POJ1990

    题意: 一群牛参加完牛的节日后都有了不同程度的耳聋,第i头

  3. POJ1990 题解

    题目大意:有若干头牛,每个牛有一个音量值,两头牛能互相听见对方说话需要发出两头牛中音量值较大者的音量*两头牛的距离的音量,求使任意两头牛都互相听见对方需要发出的音量总和.每头牛的音量值可以相同,但坐标 ...

  4. USACO26 moofest 奶牛集会(归并排序)

    听说这题也是bzoj的3378&&poj1990,然而没有权限号交不了..poj懒得登. 题意:有n个奶牛,他们相互发出max(a[i].v,a[j].v)*abs(a[i].p-a[ ...

  5. poj1990树状数组

    Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...

  6. bzoj3378[Usaco2004 Open]MooFest 狂欢节*

    bzoj3378[Usaco2004 Open]MooFest 狂欢节 题意: n只奶牛,第i只听力为vi,坐标为xi,两只奶牛聊天时音量是max(vi,vj)*abs(xi-xj).求n(n-1)/ ...

  7. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  8. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. myeclipse 配置堆内存

    2.非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64:由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4. 打开myeclipse ...

  2. oracle分区表按时间自动创建

    表分区是一种思想,分区表示一种技术实现.当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO.oracle分区表是oracle数据库提供的一种表分区的实现形式.表进行分区后,逻辑上仍然是一张 ...

  3. Python :编写条件分支代码的技巧

    『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目. 在雕琢代码的过程中,有大工程:比如应该用什么架构.哪种设计模式.也有 ...

  4. 即刻开始使用Kotlin开发Android的12个原因(KAD 30)

    作者:Antonio Leiva 时间:Jul, 11, 2017 原文链接:https://antonioleiva.com/reasons-kotlin-android/ 这组文章已到最后了,它们 ...

  5. 初学Direct X(10)—— D3D基础预备知识

    初学Direct X(10) -- D3D基础预备知识 1. 像素格式 D3DFMT_X8R8G8B8(F) X:未加使用 8:8位用于显示 B:用于显示蓝色 F:浮点像素类型 以下三个较为常用,使用 ...

  6. JS获取HTML DOM元素的8种方法

    什么是HTML DOM 文档对象模型(Document Object Model),是W3C组织推荐的处理可扩展置标语言的标准编程接口.简单理解就是HTML DOM 是关于如何获取.修改.添加或删除 ...

  7. 博客美化—添加萌萌的live2D看板娘(不能再简单了)

    看着很多博客都有live2D的萌萌哒看板娘,我闲着有空说干就干. 从参考博客的附件中下载资源文件 waifu.css waifu-tips.js live2d.js flat-ui.min.css// ...

  8. 【Set jsonObj = toJson( jsonString )】创建JSON实例

    创建JSON实例: 原型: toJson( jsonString ) 说明: 创建JSON实例 返回: [JSON] 参数: jsonString [可选] 可以用json格式字符串创建实例 示例: ...

  9. [Clr via C#读书笔记]Cp4类型基础

    Cp4类型基础 Object类型 Object是所有类型的基类,有Equals,GetHashCode,ToString,GetType四个公共方法,其中GetHashCode,ToString可以o ...

  10. 机器学习实战笔记一:K-近邻算法在约会网站上的应用

    K-近邻算法概述 简单的说,K-近邻算法采用不同特征值之间的距离方法进行分类 K-近邻算法 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用范围:数值型和标称型 ...