bzoj1935.园丁的烦恼 (离散化 && 树状数组)

BZOJ题目镜像 BZOJ网站镜像,对于经常挂掉的BZOJ真是刷题必备啊! 立即下载

(SHOI2007) 平面内有 N 个点,有 M 个查询,每次询问一个以 ( Ai, Bi ) 为左下角,( Ci, Di ) 为右上角的矩形内有多少个点

这种问题首先想到的应该是二维线段树或者树状数组,但是这道题中 N, M 都是 500000,二维的肯定为超出空间限制,这能用一维。同时这道题中没有中途修改操作,所以可以离线做。把这些点离散化,询问的点也算在内,按 X 为第一关键字,是否为插入的点为第二关键字排序,这样就能做到先插入点,再查询。询问计算个数时,都按以 ( 0, 0 ) 为左下角的矩阵,用树状数组查询,这样能做到 O( logn ),之后和差一下就行。

#include <cstdio>
#include <algorithm>

using namespace std;

#define lowbit(x) (x & (-x))

const int MAX_N = 500005;

struct node{
	int x, y, id, f;
	friend bool operator<(const node& a, const node& b){
		return a.x < b.x || (a.x == b.x && a.f < b.f); 
	} // sort x
}Q[MAX_N * 5];

inline int read()
{
	int ret = 0, f = 1; char c = getchar();
	while (!(c >= '0' && c <= '9')){ if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') ret = ret*10 + c-'0', c = getchar();
	return ret; 
}

int N, M, x[MAX_N], y[MAX_N], st[MAX_N * 3];
int a[MAX_N], b[MAX_N], c[MAX_N], d[MAX_N];
int tot = 0, all = 0, tree[MAX_N][5]; // lisan, sum, ans
int s[MAX_N * 3]; // tree

int got(int x)
{
	int l = 1, r = tot;
	while(l <= r){
		int mid = (l+r) >> 1;
		if(st[mid] == x) return mid;
		  else if(st[mid] > x) r = mid - 1;
		  else l = mid + 1;
	}
}

void tree_add(int x)
{
	for (int i=x; i<=tot; i += lowbit(i))
		s[i] += 1;
}

int tree_query(int x)
{
	int ret = 0;
	for(int i = x; i; i -= lowbit(i))
		ret += s[i];
	return ret;
}

void work(void)
{
	sort(Q+1, Q+all+1);
	for (int i=1; i<=all; i++){
		printf("%d %d %d %d\n", Q[i].x, Q[i].y, Q[i].id, Q[i].f);
		if(!Q[i].f) tree_add(Q[i].y);
		else {
			int t = tree_query(Q[i].y);
		//	printf("%d %d ", Q[i].x, Q[i].y); printf("%d\n", t);
			tree[Q[i].id][Q[i].f] = t;
		}
	}
}

void doit(void)
{
	sort(st+1, st+tot+1);
	for (int i=1; i<=N; i++){
		y[i] = got(y[i]);
		Q[++ all].x = x[i]; Q[all].y = y[i];
	}
	for (int i=1; i<=M; i++){
		b[i] = got(b[i]); d[i] = got(d[i]);
		Q[++ all].x = c[i], Q[all].y = d[i], Q[all].id = i, Q[all].f = 1;
		Q[++ all].x = a[i] , Q[all].y = d[i], Q[all].id = i, Q[all].f = 2;
		Q[++ all].x = c[i], Q[all].y = b[i] , Q[all].id = i, Q[all].f = 3;
		Q[++ all].x = a[i] , Q[all].y = b[i] , Q[all].id = i, Q[all].f = 4;
	}
	work();
	for (int i=1; i<=M; i++){
		int ans = 0; ans = tree[i][1] + tree[i][4] - tree[i][2] - tree[i][3];
		//printf("%d %d %d %d\n", tree[i][1], tree[i][4], tree[i][2], tree[i][3]);
		//printf("%d\n", ans);
	}
	return;
}

int main(void)
{
	N = read(); M = read();
	for (int i=1; i<=N; i++) x[i] = read(), y[i] = read(), st[++ tot] = y[i];
	for (int i=1; i<=M; i++) 
	  a[i] = read(), b[i] = read(), c[i] = read(), d[i] = read(),
	  st[++ tot] = b[i], st[++ tot] = d[i];
	
	doit();
	return 0;
}




BZOJ全代码 BZOJ平台全部代码,解压到一个文件夹在打开使用。BZOJ平台全部代码,解压到一个文件夹在打开使用。 立即下载

相关推荐

Eps总结(1)——Eps入门级基本操作:新建工程、加载数据、新建对象、输入输出对象、基本操作

一、新建工程 1、点击工程的“新建” 2、选择比例尺,自定义工程名字,选择保存路径(最好是英文名字与路径) 二、加载本地倾斜影像、点云、超大影像(正射影像): 其中加载点云数据:a.首先需要将las点云转换为pcd格式。b然后才能加载点云。 三、新建点、线、面等对象 1、首先选择好要画的类型: 2、当选择好要画的类型后,不论是点、线、面都使用左侧工具条中的“一条线”进...

liukunrs的博客 4万+

P2163 [SHOI2007]园丁的烦恼(二维数点模板题)

P2163 [SHOI2007]园丁的烦恼 题意: 在一个二维平面内有一些点,给你一个左上角和右下角的点,问这个范围内有多少点 题解: 二维数点模板题 我们设F(a,b)表示以(0,0)为左下角,(a,b)为右上角的矩阵内有多少点 如图不难得到: 黑色部分为=F(c,d)+F(a-1,b-1)-F(a-1,d)-F(c,b-1) (不就是二维前缀和) 因为数据范围过大,所以横纵坐标都离散化处理。 现在我们如何求(0,0)到(x,y)内点的数量 我们把矩阵内的点看作是插入操作,相当于在矩阵中(x,y)位置+

qq_35975367的博客 694

Upwork入门指南:如何创建吸引人的个人资料

本文详细介绍了如何在Upwork上创建并优化个人资料,帮助自由职业者吸引更多客户。内容包括: 注册与验证:从注册账号到邮箱验证的完整步骤。 个人资料填写:如何撰写吸引人的标题、简介,选择技能标签,以及设置专业头像和费率。 作品集与优化:上传高质量作品集,提升搜索排名和客户信任度。 常见问题解答:解决新手常见问题,如无工作经验或审核不通过。 通过本文的指导,你将学会打造一个专业且高效的个人资料,为在Upwork上获得更多机会奠定基础。

qq_61813593的博客 3520

[SHOI2007]园丁的烦恼

题目链接:[SHOI2007]园丁的烦恼 二维数点,随便怎么做都行。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long #define mid (l+r>>1) using namespace std; con...

青烟绕指柔的博客 393

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

(OSTrack)Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework

Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework (OSTrack)

小火山的博客 1653

【Shoi2007】bzoj 1935 园丁的烦恼

离线+树状数组

YHaX的博客 701

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 401

[Shoi2007] 园丁的烦恼

题目描述: 有 N 个 点 每个点坐标为 X Y 有 M 个查询,每个查询表示一个矩形,问这个矩形里有几个点 题目分析: 二维矩形问题,直接怒打一发 离散化+树套树 然而怎么卡常也只有48分(雾 本题的正确做法是,离线搞! 我们把X Y 存起来,然后按照X升序排列,每次插入 Y ,查询 Y 就好了(雾 连离散化都不用打! 矩形割补求一下 题目链接: BZOJ 1935...

HT008的Blog 446

别再折腾SNAP了!ENVI 5.6.0 直接拖拽打开Sentinel-2 L2A数据的正确姿势

本文详细介绍了ENVI 5.6.0直接处理Sentinel-2 L2A数据的高效方法,无需通过SNAP进行繁琐的重采样预处理。通过直接拖拽XML文件,用户可以快速加载不同分辨率的波段数据,显著提升工作效率。文章还对比了直接打开与SNAP重采样流程的优劣,并提供了常见问题解决方案和高级应用技巧。

weixin_30296405的博客 635

SAP MD09 事务码中的物料需求追溯详解

物料需求追溯是指在物料需求计划中,追踪特定物料的需求来源和满足方式的过程。它帮助企业确定每个需求(如销售订单、独立需求、预留等)是由哪些供应元素(如库存、生产订单、采购订单等)来满足的。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

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

BZOJ 1935 园丁的烦恼 (cdq分治+树状数组)

对于多维偏序问题,cdq分治可以使问题维度降低一维(当然嵌套的cdq分治可以降低多维)。 所以解决多维偏序问题都可以这样做:第一维排序,中间几维cdq分治,最后一维树状数组。 本题可以认为是一个三维偏序问题 写到上面这句话时突然感觉自己脑子有坑。。。 我的做法是这样的: 第一维时间(然而事实上因为过程中没有修改,所以并没有这一维),第二维X坐标,第三维Y坐标,本题确实可以认为是一个三维偏...

qq_38515845的博客 331

YOLOv8改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv8的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1223

[bzoj1935][Shoi2007]Tree 园丁的烦恼 树状数组

1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MB [Submit][Status][Discuss] Description 很久很久以前,在遥远的大陆上有一个美丽的国家。统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草。有一天国王漫步在花园里,若有所思,他问一个园丁道:

Unlimited Code Works 416

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【BZOJ】【P1935】【Shoi2007】【Tree 园丁的烦恼】【题解】【树状数组+离散化】

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1935 经典的问题,qiu

退役狗的专栏 993

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【BZOJ1935/4822】[Shoi2007]Tree 园丁的烦恼/[Cqoi2017]老C的任务 树状数组

题意:两道题差不多,都是给你一堆平面上的点,每个点有权值,然后m次询问求某一矩形区域内的点权和 题解:先离散化,然后将询问拆成左右两条线段,然后将点和这些线段一起按x坐标排序,在y轴上维护树状数组。然后询问的答案就是两条线段上点权和之差 BZOJ1935: #include <cstdio> #include <cstring> #include &...

aodanchui1057的博客 133

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

BZOJ 1935 园丁的烦恼 离线+树状数组

给出一个1e7×1e71e7×1e71e7×1e7的矩阵,然后有5e55e55e5个点和5e55e55e5次询问,每次询问都是问一个矩形里面有多少个点。 直接把询问拆成四个前缀,然后按xxx排序,对所有的yyy离散化,对每个xxx用树状数组先加点再查询。最后O(1)O(1)O(1)回答询问。 #include<bits/stdc++.h> using namespace std; ty...

qq_40859782的博客 189

[BZOJ]1935:[Shoi2007]Tree 园丁的烦恼

题解: 离线 排序 对y坐标离散化后 差分用树状数组统计贡献 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <stack> #include ...

weixin_30907523的博客 75

BZOJ1935: [Shoi2007]Tree 园丁的烦恼

1935: [Shoi2007]Tree 园丁的烦恼 Description 很久很久以前,在遥远的大陆上有一个美丽的国家。统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草。有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思索一个问题,如果我们把花坛摆成六个六角形,那么……” “那么本质上它是一个深度优先搜索,陛下”,园丁深深地向国王鞠了一躬...

dolphin198455的博客 118

bzoj 1935: [Shoi2007]Tree 园丁的烦恼 ( 树状数组 )

题目: 就是求矩形内点的个数 这个没有修改,但是数据范围很大,所以要离散化, 用树状数组就好了,没有必要用 CDQ . 求ans 的时候,分成求 四个点到原点的矩阵和,加加减减就好了 #include<bits/stdc++.h> #define low(x) (x & (-x)) using namespace std; const int N = 1e6+10;...

Top_xiao的博客 227

bzoj1935 [Shoi2007]园丁的烦恼

bzoj1935 [Shoi2007]园丁的烦恼 有N个点坐标为(xi,yi),M次询问,询问(a,b)-(c,d)的矩形内有多少点。 0≤n≤500000,1≤m≤500000,0≤xi,yi≤10000000 看完数据范围傻眼系列。 做法: 离线处理 因为这个范围肯定不能把x y都离散, 所以只把点和询问的y坐标放在一起都离散化,然后一起按x坐标排序, 再开一个树状数...

dizou7578的博客 92

BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)

题意 题目链接 Sol 二维数点板子题 首先把询问拆成四个矩形 然后离散化+树状数组统计就可以了 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 4e6 + 10; inline int read() { ...

weixin_30433075的博客 289

[BZOJ1935][SHOI2007]Tree 园丁的烦恼(离线+树状数组)

题意 给出第一象限的n个点,有m次询问,每次询问一个矩形中的点的个数.(0<=n,m<=500000,0<=xi,yi<=10000000) 题解 一眼望去不可做。 用二位前缀和的思想,一个矩形可以用以坐标轴为一对临边的四个矩形加减得到。 考虑离线,离散化。所以我们要求的只是若干个以坐标轴为一对临边的矩形的权值。 但还是不可做。 转化为序列问题,我们...

Aaronliu17008的博客 227

bzoj 1935: [Shoi2007]Tree 园丁的烦恼

树状数组+离线排序处理

我要吃熊猫 533

BZOJ 1935: [Shoi2007]Tree 园丁的烦恼

Description很久很久以前,在遥远的大陆上有一个美丽的国家。统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草。有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思索一个问题,如果我们把花坛摆成六个六角形,那么……” “那么本质上它是一个深度优先搜索,陛下”,园丁深深地向国王鞠了一躬。 “嗯……我听说有一种怪物叫九头蛇,它非常贪吃苹果树……” “是的,显

ypxrain的博客 300
上一篇: usaco.section1.4.Arithmetic Progressions(枚举)
下一篇: bzoj1003.物流运输(最短路 && DP)
ALXPCUN
博客等级 码龄11年 4粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值