HDU 3015 Disharmony Trees
题解:在路边有一行树,给出它们的坐标和高度,先按X坐标排序。记录排名,记为rankx,再按它们的高度排序,记录排名,记为rankh。两颗树i,j的差异度为
fabs(rankx[i]-rankx[j])*min(rankh[i],rankh[j])
最后求出任异两颗树差异度的和。
题解:首先,需要解决的是min(rh)的问题,对于这个问题,只要离散化之后按rh从大到小排序顺序求解即可,然后用树状数组维护之前出现rx比当前值小的个数与总和,那么同时就可以计算rx比当前大的个数和总和了,那么就可以依次计算出答案了。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100010;
struct node{long long x,h,rx,rh;}a[N];
int s[N],c[N],n;
long long ans,ns;
bool cmp1(node a,node b){return a.x<b.x;}
bool cmp2(node a,node b){return a.h<b.h;}
bool cmp3(node a,node b){return a.h>b.h;}
void updata(int x,int num){while(x<=n)c[x]++,s[x]+=num,x+=x&-x;}
int time(int x){int t=0;while(x>0)t+=c[x],x-=x&-x;return t;}
int sum(int x){int t=0;while(x>0)t+=s[x],x-=x&-x;return t;}
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)s[i]=c[i]=0;
for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].h);
sort(a+1,a+n+1,cmp1);a[1].rx=1;
for(int i=2;i<=n;i++)a[i].rx=(a[i].x==a[i-1].x?a[i-1].rx:i);
sort(a+1,a+n+1,cmp2);a[1].rh=1;
for(int i=2;i<=n;i++)a[i].rh=(a[i].h==a[i-1].h?a[i-1].rh:i);
sort(a+1,a+n+1,cmp3);
ans=ns=0;
for(int i=1;i<=n;i++){
long long t=time(a[i].rx),m=sum(a[i].rx);
ans+=a[i].rh*(a[i].rx*t-m+ns-m-a[i].rx*(i-t-1));
updata(a[i].rx,a[i].rx);
ns+=a[i].rx;
}
cout<<ans<<endl;
}
return 0;
}
HDU 3015 Disharmony Trees的更多相关文章
- hdu 3015 Disharmony Trees (离散化+树状数组)
Disharmony Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 3015 Disharmony Trees(树状数组)
题意:给你n棵树,每棵树上有两个权值X H 对于X离散化 :3 7 1 5 3 6 -> 2 6 1 4 2 5,对于H一样 然后F = abs(X1-X2) S=min(H1,H2) 求出 ...
- HDU 3015 Disharmony Trees 【 树状数组 】
题意:给出n棵树,给出横坐标x,还有它们的高度h,先按照横坐标排序,则它们的横坐标记为xx, 再按照它们的高度排序,记为hh 两颗树的差异度为 abs(xx[i] - xx[j]) * min(hh[ ...
- Disharmony Trees HDU - 3015
Disharmony Trees HDU - 3015 One day Sophia finds a very big square. There are n trees in the square. ...
- Disharmony Trees 树状数组
Disharmony Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- Disharmony Trees
/* 写完这篇博客有很多感慨,过去一段时间都是看完题解刷题,刷题,看会题解,没有了大一那个时候什么都不会的时候刷题的感觉,这个题做了一天半,从开始到结束都是从头开始自己构思的很有感觉,找回到当初的感觉 ...
- Disharmony Trees HDU - 3015 树状数组+离散化
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using ...
- HDU 2841 Visible Trees 数论+容斥原理
H - Visible Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- hdu3015 Disharmony Trees
Problem Description One day Sophia finds a very big square. There are n trees in the square. They ar ...
随机推荐
- eclipse开发工具Import工程后,工程文件夹上出现黄色感叹号——解决方法
eclipse开发工具Import工程后,工程文件夹上出现黄色感叹号. 可能是Work目录无效,解决方法:删除Work目录即可,如下图所示: 删除后,如下图:
- InnoDB的配置
http://www.cnblogs.com/szx_rencaijob/archive/2010/04/28/1723211.html 推荐InnoDB的配置(1G内存情况,主要运行mysql服务器 ...
- vim vimrc
set nu set shiftwidth= set tabstop= set softtabstop= set autoindent set cindent set smartindent file ...
- XSS【跨站脚本攻击】
从客户端(txt="<script><a href="www...")中检测到有潜在危险的 Request.Form 值. 如果你使用的是.NET 3. ...
- JQ插件开发方法
由于项目原因,不得不写个JQ侧滑插件来满足需求.. 先引用两篇博文,待测试了 再写怎么做.. http://blog.csdn.net/business122/article/details/8278 ...
- IQC,QA,FQC,OQC,IPQC的定义与职责
进货检验员(IQC):CLInetLabIQC(以下简称IQC)是CLInet在多年开发维护EQA(实验室间质量评价)系统后,成功开发的一套完善的实验室内部的质量评价.质量控制的软件.它不仅包含了每家 ...
- Optipng—PNG的优化图像工具初探
PNG 即 Portable Network Graphic 的简称,PNG 图像是一种无损压缩图像文件格式.因为网络传输的需要,我们总是希望 PNG 图像的容量能够小些.小些.再小些.要优化 PNG ...
- 对开发中常见的内存泄露,GDI泄露进行检测
对开发中常见的内存泄露,GDI泄露进行检测 一.GDI泄露检测方法: 在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况. 注意点 ...
- Sublime 插件安装、常用配置
安装:sublime + 插件 安装Sublime: 官网:http://www.sublimetext.com/ 安装package control组件,之后我们会使用该组件给Sublime安装常用 ...
- Nitrous.IO融资665万美元 帮助开发者省去配置调试等工作-CSDN.NET
Intro to Computer Science Class Online (CS101) - Udacity Building a Search Engine Nitrous.IO融资665万美元 ...