baritone 上低音号(链表 卡矩阵)

该问题描述了一个关于上低音号手在矩阵中分布的场景,目标是找出包含超过k个号手的矩形区域数量。通过从上到下和从下到上枚举边界,并使用有序链表维护当前边界内的点,实现O(n^2 * k)时间复杂度的解决方案。
摘要由CSDN通过智能技术生成

baritone

上低音号
【题目描述】
黄前久美子是一名上低音号手。这天,一共有n名上低音号手参加演出。演出的场地是一个r行c列的矩阵,每名上低音号手都在其中一个方格内,且没有两个人在同一个方格。
摄影师为这次演出拍摄了许许多多的照片,每张照片都是一个边框平行于坐标轴的矩形。久美子希望照片中能出现尽量多的上低音号手——具体地,如果一张照片出现了超过k名上低音号手,那么久美子会很喜欢这张照片。
那么,究竟能拍出多少张不同的久美子喜爱的照片呢?
【输入格式】
第一行四个整数r,c,n,k。
接下来n行,每行两个数x,y,表示一名在第x行第y列的上低音号手。保证数对(x,y)不重复出现。
【输出格式】
输出一行一个整数,表示可以拍出的久美子喜爱的照片数量。
【样例数据】
baritone1.in
2 2 1 1
1 2
baritone1.out
4
baritone2.in
3 2 3 3
1 1
3 1
2 2
baritone2.out
1
baritone3.in
3 2 3 2
1 1
3 1
2 2
baritone3.out
4
baritone4.in
1 1 1 1
1 1
baritone4.out
1
【数据范围】
对于30%的数据,n,r,c≤500。
对于另30%的数据,k≤3。
对于100%的数据,1≤n,r,c≤3000,1≤k≤10。

思路:
从上往下枚举上边界,从下往上枚举下边界。
考虑已经统计出上下边界为枚举的包含至少k 个点的矩形数,当下边界往上移动时,可能会删除某些点。
用按横坐标排序的有序表维护当前上下边界间的点,只有删除点的前k 个点和后k个点会影响答案,其它矩形区域依然可行。
这样每次只需要从有序表中删除一个点并统计答案,使用链表即可。
复杂度O( n^2*k )。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iostream>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值