hdu3015 Disharmony Trees(树状数组)

Context Capture10.20 安装教程(附安装包) ContextCapture 是一款由Bentley公司推出的实景建模软件,可以快速为各种类型的基础设施项目生成最具挑战性的反应现实环境的三维模型。 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015

题意:在路边有一行树,给出它们的坐标和高度,先按X坐标排序。记录排名,记为rankx,再按它们的高度排序,记录排名,记为rankh。

两颗树i,j的差异度为fabs(rankx[i]-rankx[j])*min(rankh[i],rankh[j]),最后求出任异两颗树差异度的和。(注意:有并列排名时算它们的实际排名,如1,2,2,4,没有第三名)。


解析:差异度等于F*S,突破点就在这个S上,在按高度排序以后,我们可以从低到高枚举每一颗树,当前树i和比它高的树匹配,这样S就是确定的了,就是当前这颗树的rankh,现在考虑F,F = fabs(rankx[i]-rankx[j]),假设我们知道i点以后有多少颗树的坐标大于第i颗树,记为cntb[i],并记录它们的rankx的和,记为sumb[i];我们可以利用cntb[i]算出高于第i颗树所有树中坐标小于rankx[i]的树的个数cnts[i],同理计算出它们的和sums[i]。这样就可以算出第i颗树与所有高于第i树的差异度之和,

等于rankh[i] * (sumb[i] - cntb[i]*rankx[i] + cnts[i]*rankx[i] - sums[i]); cntb与sumb数组可以用两颗树状数组用求逆序数的思想来得出,这里就不再多说了。

参考代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

#define M 100005
#define clr(arr,v) memset(arr,v,sizeof(arr))
typedef __int64 I64;

struct point{
	int x,h;
	int rankx,rankh;
}data[M],data1[M];

I64 cntb[M],sum[M],sumb[M];
I64 tree1[M],tree2[M];

bool cmp1(point po1,point po2) { return po1.h < po2.h; }
bool cmp2(point po1,point po2) { return po1.x < po2.x; }

int lowbit(int x){ return x&-x; }
int get_num(I64 tree[],int x,int n)
{
	if(x >= n) return tree[n];
	return tree[x]+get_num(tree,x+lowbit(x),n);
}

void update(I64 tree[],int x,int value)
{
	if(x <= 0) return ;
	tree[x] += value;
	update(tree,x - lowbit(x),value);
}

void init(int n)
{
	clr(tree1,0);
	clr(tree2,0);
	clr(cntb,0);
	clr(sum,0); 
	clr(sumb,0);
	int rankx = 0;
	sort(data,data+n,cmp2);
	for(int i = 0;i < n;++i)
	{
		if(i == 0 || data[i].x != data[i-1].x)
			data[i].rankx = ++rankx;
		else 
			data[i].rankx = data[i-1].rankx,++rankx;
	}
	int rankh = 0;
	sort(data,data+n,cmp1);
	for(int i = 0;i < n;++i)
	{
		if(i == 0 || data[i].h != data[i-1].h)
			data[i].rankh = ++rankh;
		else
			data[i].rankh = data[i-1].rankh,++rankh;
	}
	for(int i = n-1;i >= 0;--i)
	{
		sum[i] = data[i].rankx + sum[i+1];
		cntb[i] += get_num(tree1,data[i].rankx,rankx);
		update(tree1,data[i].rankx-1,1);
		sumb[i] = get_num(tree2,data[i].rankx,rankx);
		update(tree2,data[i].rankx-1,data[i].rankx);
	}
}

I64 solve(int n) 
{
	I64 res = 0;
	for(int i = 0;i < n;++i)
		res += data[i].rankh * (sumb[i] - data[i].rankx*cntb[i] + data[i].rankx * (n-1-i-cntb[i]) - (sum[i] - sumb[i] - data[i].rankx));
	return res;
}

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		for(int i = 0;i < n;++i)
			scanf("%d%d",&data[i].x,&data[i].h);
		init(n);
		printf("%I64d\n",solve(n));
	}
	return 0;
}

常规波束形成——时域波束形成、频域波束形成 本文介绍了波束成形,包括时域波束成形和频域波束成形,并解释了在实现过程可能存在疑惑的相位补偿。 阅读详情

相关推荐

Linux系统搭建OpenClaw(原Clawdbot)全流程指南 最新版

工具定位:开源个人 AI 助手,支持文件读取、命令执行、多渠道交互(Telegram / 本地终端等);系统要求:主流 Linux 发行版(Ubuntu/Debian/CentOS 等),Node.js ≥22(核心依赖);安全提示:OpenClaw 为测试版,具备高权限操作能力,建议使用非主力机,配置权限白名单,避免接触敏感数据。

AI时代老码农的第二春 6560

hdu 3015 Disharmony Trees

点击打开hdu 3015 思路: 树状数组 分析: 1 题目给定n棵树的横坐标和高度,然后给定横坐标排序后的rank_f已及树的高度排序后的rank_s,规定两颗树的FAR为abs(rank_f[i] , rank_f[j]) , SHORT为min(rank_s[i] . rank[_sj]),那么i和j的组合的值为FAR*SHORT,求所有组合方式的总和 2 我们按照树的高度从大到小排...

我是传奇 297

快速理解STLink引脚图中复位引脚作用

深入讲解STLink引脚图中复位引脚的实际用途,帮助开发者快速掌握其在调试与下载过程中的关键作用,结合stlink引脚图理解更高效。

weixin_32324637的博客 1326

HDU 3015 Disharmony Trees

转载请注明出处:忆梦http://blog.youkuaiyun.com/yimeng2013/article/details/13033965 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015 题意:有一排树每一棵都有两个值X,H。 要求这一排树的“不和谐”值;     计算规则:每两棵树的F*S的值之和;     F的定义:

忆梦 963

避坑指南:Zephyr RTOS与nRF Connect SDK环境搭建常见错误及解决方案

本文详细解析了Zephyr RTOS与nRF Connect SDK环境搭建过程中的常见错误及解决方案,涵盖网络问题、代理设置、SEGGER Embedded Studio配置、分支切换等关键环节。针对开发者实际遇到的痛点问题,提供了一系列实用技巧和深度排错方法,帮助高效完成NCS开发环境部署。

weixin_28685287的博客 172

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

HDU 3015 Disharmony Trees 【树状数组】

HDU 3015 Disharmony Trees 【树状数组】 POJ 1990升级版 题意:给你树高和树的横坐标,然后按两个参数从小到大有两个排名rank1,rank2,例:3 3 1 3 4 对应排名rank 就是 2 2 1 2 5, 任意两个两棵树的值为min(高度对应的rank)*abs(位置差对应的rank),问所有任意两棵树的差为多少. 思路:先排序求出rank1,rank2,然...

qq_43653111的博客 214

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3791

树状数组-HDU3015 Disharmony Trees

什么是树状数组? 简单来说,就是暴力遍历数组来解决区间问题等,不过遍历的路径使用了位运算来进行压缩,复杂度是O(log2(n))这样就不会超时了(为所欲为?)。 lowbit()操作 其核心是神奇的lowbit操作,lowbit(x)=x&(-x),它的功能是找到x的二进制数的最后一个1,原理是利用负数的补码表示,补码是原码取反加一。例如x=6=00000110(2),-x=x补=11111010(2),那么lowbit(x)=x&(-x)=10(2)=2。 从lowbit()引出数组a[],a[x]的值是

有一分热,发一分光。 5037

SAP Gateway 中事务码 /IWFND/MAINT_SERVICE 的用法介绍

本文系统梳理了SAP Gateway中/IWFND/MAINT_SERVICE事务码的核心功能与运维实践。作为OData服务管理中樞,它支持服务注册激活、ICF节点配置、系统别名绑定、批量处理等关键操作。文章详解了服务目录、ICF节点、系统别名的配置要点,提供了批量激活、缓存清理、性能监控等实用技巧,并针对常见陷阱(如传输配置、删除残留)给出解决方案。通过制造业批量激活、零售业OAuth集成等案例,展示了事务码在企业级应用中的实际价值,为SAP Gateway运维提供了一套完整的治理清单。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 311

基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

一、前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文章:XILINX 的 MIG IP(非AXI4)接口时序以及控制 二、实验内容 本次实验的内容主要是通过MIG IP核向DDR3读写数据,DDR3的接口时序由ddr_top模块提供: ddr_top模块的数据来源是wr_fifo,wr_fifo的数据实际来自top_sd_photo模块(本实验仿真

耐心的小黑的博客 3027

HDU 3015 Disharmony Trees 树状数组

来源:http://acm.hdu.edu.cn/showproblem.php?pid=3015 题意:有一些树,这些树的高度和位置给出。现在高度和位置都按从小到大排序,对应一个新的rank,任意两棵树的值为min(高度的rank) * abs(位置差的绝对值)。问所有任意两棵树的值的和是多少。 思路:首先对高度和位置分别离散,接下来就是树状数组 了,和poj 1990是一样的。 代码:

1531

2025秋招LLM大模型多模态面试题(八)- langchain完整面试题

1. **什么是 LangChain** 2. **LangChain 包含哪些核心模块** - 模型输入/输出(Model I/O) - 组件管理 - 数据处理 - 链式组合 - 记忆与上下文管理 - 外部集成 3. **一些核心概念** 4. **什么是 LangChain Agent?** 5. **什么是 LangChain model?** 6. **LangChain 包含哪些特点?** 7. **LangChain 如何使用?** - LangChai

weixin_41496173的博客 2192

HDU 3015 Disharmony Trees 树状数组

http://acm.hdu.edu.cn/showproblem.php?pid=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 m...

xiji333的博客 252

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HDU 3015 Disharmony Trees(树状数组)

思路: 1.我们首先hashhashhash一下,计算出每棵树它的xxx和hhh的排名,用pair<int,int>类型的数组存储每颗树,然后按hhh的排名降序排列; 2.我们用降序排列好的数组,来一个个进行遍历;遍历之前我们应该先建好两个BITBITBIT,两个树状数组的计算函数(cal(i,1)和cal(i,0),其中i代表位置,1代表第一个树状数组,0代表第二个树状数组)的意思...

Yuhan的博客 341

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU - 3015 Disharmony Trees(树状数组)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015

qq_43423395的博客 248

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Disharmony Trees HDU - 3015(树状数组)

传送门:QAQ   题意:给你一些树的高度和坐标,让你根据它的规则离散化后得到的树,每两个树都对应一个价值,价值的计算方法为min(h1,h2)*abs(x1-x2),然后让你输出任意两个树的价值和。 题意:首先我们观察这个式子,暴力就是n^2,我们首先发现需要的是两个树中小的高度,这样我们就可以先将树按高度排序,然后高度从大到小遍历,遍历到每个高度时,我们只要关心之前遍历过的树的abs(x...

liexss的博客 296

hdu 3015 Disharmony Trees(树状数组)

Disharmony Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 944    Accepted Submission(s): 468 Problem Description One day Sop

K键盘里的青春K 838

树状数组+公式推导 hdu 3015 Disharmony Trees

题目给定n棵树的横坐标和高度,然后给定横坐标排序后的rank_f已及树的高度排序后的rank_s,规定两颗树的FAR为abs(rank_f[i] , rank_f[j]) , SHORT为min(rank_s[i] . rank[_sj]),那么i和j的组合的值为FAR*SHORT,求所有组合方式的总和

ACM_10000h的专栏 519

hdu3015 Disharmony Trees(树状数组+排序)

题目链接:点击打开链接 解题思路: 1、首先对x和高度h分别从小到大排序记录排名 2、然后对高度h按从大到小排序(保证当前要计算的树的高度是所有已经遍历的树中最小高度,便于计算S=min(h1,h2)) 3、循环遍历数组,每次遍历向树状数组C中t[i].rx位置增加t[i].rx,向树状数组C1中t[i].rx位置增加1 解析:C记录排名和,C1记录个数 所以以t[i].rh为

Crazy_Bear 912

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

题目连接 题意:给你n棵树的坐标和高度,分别按两个值升序排序后,得到每棵树的排名,分别为uiu_iui​和viv_ivi​,求∑i=1n∑j=i+1nabs(ui−uj)∗min(vi,vj)\sum_{i = 1}^n \sum_{j = i + 1}^n abs(u_i - u_j) * min(v_i, v_j)∑i=1n​∑j=i+1n​abs(ui​−uj​)∗min(vi​,vj​)。 题解:因为是区间求和,想到了树状数组。若想要一次性求一个区间,那么在这个区间中min(vi,vj)min(v_

SsteelXD的博客 1818

HDU - 3015 Disharmony Trees (树状数组)

题目链接 题意: 在路旁长了一些树,但是看起来不是很和谐,不和谐的因素有 $FAR$ 和 $SHORT$,不和谐的值 $disharmony= F * S$; $FAR$ 定义为 $F =$ 两棵树之间 $x$坐标 大小排名 之差的绝对值 $SHORT$ 定义为 $S =$ 两个树之间高度最低的排名 求所有树的不和谐值的总和。 思路: 和$MooFest$...

208

HDU 3015 Disharmony Trees (树状数组)

思路:和POJ1990差不多,就是编号和排序变了一下。 #include #include #include #include #include using namespace std; #define LL long long const int maxn=100005; LL c[2][maxn]; int n; struct node { int v,x; } a[max

BehappyXiang的专栏 777

F - Disharmony Trees HDU - 3015 树状数组

传送门 题意:广场上有n棵树。两棵树之间的不和谐值与两种称为远和短的值有关。 例如,如果有5棵树,X坐标是3,3,1,3,4.。它们的D可能是2 2 1 2 5。将两棵X坐标为D1和D2的树的距离定义为F = abs(D1-D2)。短的定义与远的相似。 例如,如果有5棵树的高度是4 1 9 7 4。它们的H可能是2 1 5 4 2。高度为H1和H2的两棵树的短树定义为S=min(H1,H2)...

wa的一声就哭了 236

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

这里是题目链接:题目链接 因为高度只要求取两点中最小的那个所以我们先按高度从小到大排序,那么每次枚举的hi肯定就是最小的啦,然后用树状数组维护区间和和区间数就可以了。 题解:#include #include #include #include #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace s

过路人丶的博客 456

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

Disharmony Trees Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 663Accepted Submission(s): 307 Problem Description One day Sophia f...

anque1234的博客 189
上一篇: nyist 117 求逆序数(哈希表+树状数组)
下一篇: hdu 4417 Super Mario(哈希表+树状树组)
fire__ice
博客等级 码龄15年 26粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值