Disharmony Trees HDU - 3015

One day Sophia finds a very big square. There are n trees in the square. They are all so tall. Sophia is very interesting in them.

She finds that trees maybe disharmony and the Disharmony Value between two trees is associated with two value called FAR and SHORT.

The FAR is defined as the following:If we rank all these trees according to their X Coordinates in ascending order.The tree with smallest X Coordinate is ranked 1th.The trees with the same X Coordinates are ranked the same. For example,if there are 5 tree with X Coordinates 3,3,1,3,4. Then their ranks may be 2,2,1,2,5. The FAR of two trees with X Coordinate ranks D1 and D2 is defined as F = abs(D1-D2).

The SHORT is defined similar to the FAR. If we rank all these trees according to their heights in ascending order,the tree with shortest height is ranked 1th.The trees with the same heights are ranked the same. For example, if there are 5 tree with heights 4,1,9,7,4. Then their ranks may be 2,1,5,4,2. The SHORT of two trees with height ranks H1 and H2 is defined as S=min(H1,H2).

Two tree’s Disharmony Value is defined as F*S. So from the definition above we can see that, if two trees’s FAR is larger , the Disharmony Value is bigger. And the Disharmony value is also associated with the shorter one of the two trees.

Now give you every tree’s X Coordinate and their height , Please tell Sophia the sum of every two trees’s Disharmony value among all trees.

InputThere are several test cases in the input

For each test case, the first line contain one integer N (2 <= N <= 100,000) N represents the number of trees.

Then following N lines, each line contain two integers : X, H (0 < X,H <=1,000,000,000 ), indicating the tree is located in Coordinates X and its height is H.OutputFor each test case output the sum of every two trees’s Disharmony value among all trees. The answer is within signed 64-bit integer.Sample Input

2
10 100
20 200
4
10 100
50 500
20 200
20 100

Sample Output

1
13

题意:对于n棵树,给出所在位置和高度,然后分别对它的位置和高度做如下处理:

位置:将位置升序排序,最小的定义等级为 1,次小的定义等级为2,但是,要是位置相同的,则等级定义要相同;

例如:位置 1,2,1,5,2,3

等级  1,3,1,6,3,5

对于高度也是做如上处理;

然后,定义f=两树之间的距离差的绝对值,s=两树中最小的高度,求所有树之间f*s和。

题解:树状数组。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<stack>
#include<cstdlib>
#include <vector>
#include<queue>
using namespace std; #define ll long long
#define llu unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
const int maxn = 2e5+;
const int mod = 1e9+; struct node
{
ll x,h;
}T[];
int n; bool cmp(node s1,node s2)
{
return s1.x<s2.x;
}
bool cmp1(node s1,node s2)
{
return s1.h<s2.h;
}
int lowbit(int x)
{
return x&(-x);
}
void add(int i,int val,int *s)
{
while(i<=n)
{
s[i] += val;
i += lowbit(i);
}
}
int sum(int i,int *s)
{
int res=;
while(i>)
{
res += s[i];
i -= lowbit(i);
}
return res;
} int main()
{
while(~scanf("%d",&n))
{
int c[],c1[];
for (int i = ; i <= n; i++)
scanf("%lld %lld", &T[i].x, &T[i].h);
sort(T + , T + n + , cmp);
int xx = T[].x;
T[].x = ;
for (int i = ; i <= n; i++) //将T[i].x按照从小到大排序
{
if (T[i].x == xx)
T[i].x = T[i - ].x;
else {
xx = T[i].x;
T[i].x = i;
}
}
int xxmaxn = T[n].x;
sort(T + ,T + n +,cmp1);
xx = T[].h;
T[].h = ;
for (int i = ; i <= n; i++) //将T[i].h按照从小到大排序
{
if (T[i].h == xx)
T[i].h = T[i - ].h;
else {
xx = T[i].h;
T[i].h = i;
}
}
ll ans = ;
sort(T+,T++n,cmp1);
memset(c,,sizeof c);
memset(c1,,sizeof c1);
for(int i=;i<=n;i++)
{
add(T[i].x,T[i].x,c); // 记录所有比这个数小的和,把每个等级的数放到对应的位置上
add(T[i].x,,c1); //记录所有比这个数小的个数 每个点上记为1
}
int xiao,da; //xiao 表示比对应的数a小,反之亦然
for(int i = ;i<n;i++)
{
xiao = sum(T[i].x-,c1) * T[i].x - sum(T[i].x-,c); //找出比这个数小的个数*这个数-比这个数小的所有数之和
da = (sum(xxmaxn,c) - sum(T[i].x,c)) - (sum(xxmaxn,c1) - sum(T[i].x,c1)) * T[i].x; //找出比这个数大的数和-这个数*比这个数大的个数
ans += (xiao + da) * T[i].h;
add(T[i].x,-T[i].x,c); //把这个用过的数删除
add(T[i].x,-,c1); //把这个数位置上减去1
}
printf("%lld\n",ans);
} }

Disharmony Trees HDU - 3015的更多相关文章

  1. Disharmony Trees HDU - 3015 树状数组+离散化

    #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using ...

  2. hdu 3015 Disharmony Trees (离散化+树状数组)

    Disharmony Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. Disharmony Trees 树状数组

    Disharmony Trees Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  4. Disharmony Trees

    /* 写完这篇博客有很多感慨,过去一段时间都是看完题解刷题,刷题,看会题解,没有了大一那个时候什么都不会的时候刷题的感觉,这个题做了一天半,从开始到结束都是从头开始自己构思的很有感觉,找回到当初的感觉 ...

  5. C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥

    C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...

  6. 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) 求出 ...

  7. HDU 3015 Disharmony Trees

    题解:在路边有一行树,给出它们的坐标和高度,先按X坐标排序.记录排名,记为rankx,再按它们的高度排序,记录排名,记为rankh.两颗树i,j的差异度为 fabs(rankx[i]-rankx[j] ...

  8. HDU 3015 Disharmony Trees 【 树状数组 】

    题意:给出n棵树,给出横坐标x,还有它们的高度h,先按照横坐标排序,则它们的横坐标记为xx, 再按照它们的高度排序,记为hh 两颗树的差异度为 abs(xx[i] - xx[j]) * min(hh[ ...

  9. Eat the Trees hdu 1693

    Problem DescriptionMost of us know that in the game called DotA(Defense of the Ancient), Pudge is a ...

随机推荐

  1. (六)Redis主从自动恢复-sentinel

    原文地址,转载请注明出处: http://blog.csdn.net/qq_34021712/article/details/72026313     ©王赛超 准备工作:(1个master,2个sl ...

  2. Java编程中中文乱码问题的研究及解决方案

    0 引言 Java最大的特性是与平台的无关性及开发环境的多样性.字符串被Java应用程序转化之前,是根据操作系统默认的编码方式编码.Java语言内部采用Unicode编码,它是定长双字节编码,即任何符 ...

  3. 如何远程连接非默认端口SQL Server

    SQL Server Management Studio建立远程SQL连接  连接的时候写: 127.0.0.1,49685\sqlexpress 记得使用逗号,不是冒号

  4. gitk更改主题设置打不开

    ➜ project git:(master) gitk Error in startup script: unknown color name "lime" (processing ...

  5. BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)

    题意 题目链接 Sol 很nice的决策单调性题目 首先把给出的式子移项,我们要求的$P_i = max(a_j + \sqrt{|i - j|}) - a_i$. 按套路把绝对值拆掉,$p_i = ...

  6. SID1190471 / 烦人的幻灯片 暴力出奇迹 !!!!!!!!!!!!!!!!!!

    PID221 / 烦人的幻灯片 ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态         查看最后一次评测记录 质量还不能统计出来哦~ 题目评价 质量 无 ★★★★★ ★★★★☆ ★ ...

  7. MATLAB之数据处理+公式拟合

    MATLAB之数据处理+公式拟合 前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式. 试验数据背景 本次试验有三个自变量:V.M.G,因变量为F,每组试验重复 ...

  8. Openfire+spark在linux上搭建内部聊天系统

    一.    实验环境 Ubuntu server14.04 openfire:http://www.igniterealtime.org/downloads/index.jsp spark:http: ...

  9. java cpu使用率高异常排查

    1.top命令对cpu进行排序shift+p 2.pwdx pid查找业务进程路径 3.top -Hp pid查看相关负载线程pid 4.printf “0x%x\n” 线程pid     // 将线 ...

  10. cms-幻灯片的实现

    1.其实幻灯片的后台代码和之前的最新动态和推荐是一样的,只是前台遍历的时候不一样罢了 2.代码: 2.1:帖子mapper查询出幻灯片图片: <?xml version="1.0&qu ...