Disharmony Trees HDU - 3015 树状数组+离散化
#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 树状数组+离散化的更多相关文章
- HDU 1394 树状数组+离散化求逆序数
对于求逆序数问题,学会去利用树状数组进行转换求解方式,是很必要的. 一般来说我们求解逆序数,是在给定一串序列里,用循环的方式找到每一个数之前有多少个比它大的数,算法的时间复杂度为o(n2). 那么我们 ...
- hdu 5792 树状数组+离散化+思维
题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...
- [hdu 4417]树状数组+离散化+离线处理
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 把数字离散化,一个查询拆成两个查询,每次查询一个前缀的和.主要问题是这个数组是静态的,如果带修改 ...
- hdu 4325 树状数组+离散化
思路:这题的思路很容易想到,把所有时间点离散化,然后按时间一步一步来,当到达时间i的时候处理所有在i处的查询. 这个代码怎一个挫字了得 #include<iostream> #includ ...
- Swaps and Inversions HDU - 6318 树状数组+离散化
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...
- 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 ...
- Disharmony Trees HDU - 3015
Disharmony Trees HDU - 3015 One day Sophia finds a very big square. There are n trees in the square. ...
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
随机推荐
- Linux 系统监控工具 atop
系统监控是运维工作中重要的一环,本文以 atop 工具为例来介绍系统的重要监控项. atop可以使用yum或apt包管理器进行安装.atop man page 中详细说明了 atop 中各监控项含义及 ...
- JMeter之If Controller深究二
1.背景 接上文JMeter之If Controller深究一,在上文中提到压测采用的是JMeter3.1版本,本篇继续深究.基本确定问题原因后,宝路这边又做了不同版本的JMeter对比实验,这次加入 ...
- os.path.join() - 忽略绝对路径前的参数
os.path.join()会忽略第一个绝对路径之前的参数! 示例: >>> import os >>> os.path.join('/home', 'mushro ...
- ssh连接超时的问题
vi /etc/ssh/sshd_config ClientAliveInterval ClientAliveCountMax # 注: # ClientAliveInterval选项定义了每隔多少秒 ...
- Centos 下设置静态ip地址
今天小编遇到了需要设置centos(6.4) 下静态ip地址,下面把详细步骤记录下来. 1> 首先打开这个 vi /etc/sysconfig/network-scripts/ifcfg- ...
- 使用Unicode(宽字节字符集);多字节字符集中定义宽字节变量
2012-03-25 14:54 (分类:计算机程序) 2.2 宽字符和C 宽字符不一定是Unicode.Unicode是宽字符集的一种.然而,因为本书的焦点是Windows而不是C执行的理论,所以书 ...
- btrfs文件系统简单学习
1 btrfs文件系统 btrfs文件系统在生产环境应用还不多,因此,本文仅仅简单学习. 1.1 btrfs文件系统核心特性 1)多物理卷支持:btrfs可由多个底层物理卷组成(可以是单块物理磁盘,也 ...
- ab使用详解—如何使用apache性能测试工具进行压力测试
作为后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了.但是,在一般开发情况下,没那么多大并发情况让你测试,那该怎么办呢? 这时候,我们就可以用到apache的压 ...
- centos7安装node.js
安装版本:node-v10.15.3 一.安装必要的编译软件包 # yum install gcc gcc-c++ -y 二.从源码下载Nodejs 进入官网选择自己需要的版本 https://nod ...
- 计算机网络 From Mr.Liu
引言 本博客摘自Mr.Liu,原帖请点击这里. 感谢Mr.Liu,这个文章很充分的描述了计算机网络的核心知识点. 我还在学习中,所以没有进行自己的转述.图片因为是copy代码而没有获得,想看更详尽的, ...