#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
struct node
{
ll x,h;
} Tr[];
int n,tr1[],tr2[];
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 insert(int x,int c,int *s) //s为对应的传递过来的数组
{
for(int i=x;i<=n;i+=lowbit(i))
s[i]+=c;
}
int sum(int x,int *s)
{
int ans=;
for(int i=x;i;i-=lowbit(i))
ans+=s[i];
return ans;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=; i<=n; i++)
scanf("%lld %lld",&Tr[i].x,&Tr[i].h);
//按照从小到大的把x顺序排序
sort(Tr+,Tr+n+,cmp);
//离散化坐标
int ji=Tr[].x;
Tr[].x=;
for(int i=; i<=n; i++)
{
//如果等于前一个,那么排名也一样
if(Tr[i].x==ji)
Tr[i].x=Tr[i-].x;
//不相等,说明小于,那么就赋离散化之后的值
else
{
ji=Tr[i].x;
Tr[i].x=i;
}
}
//记录最大的数下边用
int jilu=Tr[n].x;
//按照高度从小到大进行排序
sort(Tr+,Tr+n+,cmp1);
//离散化高度
ji=Tr[].h;
Tr[].h=;
for(int i=; i<=n; i++)
{
if(Tr[i].h==ji)
Tr[i].h=Tr[i-].h;
else
{
ji=Tr[i].h;
Tr[i].h=i;
}
}
ll ans=;
//第三次进行排序
//按高度排序
sort(Tr+,Tr+n+,cmp1);
memset(tr1,,sizeof tr1);
memset(tr2,,sizeof tr2);
for(int i=; i<=n; i++)
{
//记录所有比这个数小的和
insert(Tr[i].x,Tr[i].x,tr1);
//记录所有比这个数小的个数 每个点上记为1
insert(Tr[i].x,,tr2);
}
//xiao表示比对应坐标小
int xiao;
//da表示比对应坐标大
int da;
for(int i=; i<n; i++)
{
//找出比这个数小的个数*这个数-比这个数小的所有数之和
//相当于:当前这个数分别减去比他小的
xiao=sum(Tr[i].x-,tr2)*Tr[i].x-sum(Tr[i].x-,tr1);
//找出比这个数大的数的和-这个数*比这个数大的个数
da=(sum(jilu,tr1)-sum(Tr[i].x,tr1))-(sum(jilu,tr2)-sum(Tr[i].x,tr2))*Tr[i].x;
//高度取小 此时是按高度排序的
//坐标取差
ans+=(xiao+da)*Tr[i].h;
//把这个用过的数从删除
insert(Tr[i].x,-Tr[i].x,tr1);
//把这个数位置上减去1
insert(Tr[i].x,-,tr2);
}
printf("%lld\n",ans);
}
return ;
}

Disharmony Trees HDU - 3015 树状数组+离散化的更多相关文章

  1. HDU 1394 树状数组+离散化求逆序数

    对于求逆序数问题,学会去利用树状数组进行转换求解方式,是很必要的. 一般来说我们求解逆序数,是在给定一串序列里,用循环的方式找到每一个数之前有多少个比它大的数,算法的时间复杂度为o(n2). 那么我们 ...

  2. hdu 5792 树状数组+离散化+思维

    题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...

  3. [hdu 4417]树状数组+离散化+离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 把数字离散化,一个查询拆成两个查询,每次查询一个前缀的和.主要问题是这个数组是静态的,如果带修改 ...

  4. hdu 4325 树状数组+离散化

    思路:这题的思路很容易想到,把所有时间点离散化,然后按时间一步一步来,当到达时间i的时候处理所有在i处的查询. 这个代码怎一个挫字了得 #include<iostream> #includ ...

  5. Swaps and Inversions HDU - 6318 树状数组+离散化

    #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...

  6. C - The Battle of Chibi HDU - 5542 (树状数组+离散化)

    Cao Cao made up a big army and was going to invade the whole South China. Yu Zhou was worried about ...

  7. Disharmony Trees HDU - 3015

    Disharmony Trees HDU - 3015 One day Sophia finds a very big square. There are n trees in the square. ...

  8. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. hdu 4777 树状数组+合数分解

    Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

随机推荐

  1. Latent Representation Learning For Artificial Bandwidth Extension Using A Conditional Variational Auto-Encoder

    博客作者:凌逆战 论文地址:https://ieeexplore.ieee.xilesou.top/abstract/document/8683611/ 地址:https://www.cnblogs. ...

  2. android 基础学习笔记1

    1.控件 XML种控件必须带有Layoutwidth 和height 1.textview 常用属性 text,textcolor,textsize Android 种颜色用十六进制数表示,共四种形式 ...

  3. new 的实现原理

    自己封装一个new <script> // 创建一个构造函数 function Father() { this.name = '小红'; this.eat = function () { ...

  4. H5监听浏览器滚动条scrollbar

    监听滚动条scrollbar(适配手机) 1. document.documentElement.scrollHeight:整个html的高度,含被隐藏界面高度 2. window.pageYOffs ...

  5. Python应用——自定义排序全套方案

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天的这篇文章和大家聊聊Python当中的排序,和很多高级语言一样,Python封装了成熟的排序函数.我们只需要调用内部的sort函数,就可 ...

  6. 用命令提示符运行简单的Java程序报错

    首先用记事本写一个最简单的Java代码,我把文件保存在桌面的HelloWorld文件夹中,这里将记事本的名称改为HelloWorld.java public class HelloWorld{ pub ...

  7. Vue与React的区别

    对已经了解的内容,做几点介绍,并不全面,后期会不断更新~ React与Vue都是组件化的开发框架,整体功能类似. 一.数据处理模式(单项 or 双向): React推崇单项数据流的处理模式,数据不可以 ...

  8. vue项目中出现cannot get/的解决办法

    webpack-dev-server没有配置网站根目录造成找不到可以显示的首页 配置根目录即可:   devServer: { contentBase:path.resolve(__dirname,& ...

  9. JMeter-命令行模式压测

    前言 使用非GUI模式,即命令行模式运行jmeter测试脚本能够大大缩减系统资源,今天跟小伙伴们讲一下JMeter如何在命令行模式进行压测吧! 一:配置好JDK和JMeter的环境变量(过程略) 二: ...

  10. StarUML之一、UML的相关基本概念

    为什么用UML 项目需要,在项目开发实现前期进行框架技术设计(条条大路通罗马通罗马,画图或者写代码都可以,适合就可以!). 用户的交互我们通常用Axure(原型设计)体现, 框架和功能结构设计则用UM ...