Comet OJ 茶颜悦色 线段树+扫描线(矩形覆盖最多点+优化)
题目:https://www.cometoj.com/contest/59/problem/D?problem_id=2713
题意:给你一个正方形,然后给你n个点,这个正方形能随意放哪,要求那个正方形能覆盖的最多点是多少个
思路:我们其实可以把题目转换一下,我们可以以每个点为中心,我们就可以以那个点+正方形边长,就代表正方形在这个范围内就能覆盖到当前点
然后我们就相当与求一个点被覆盖的最多次数是多少,我们利用扫描线,我们每次入边加进去,然后我们求区间最大值来持续更新即可,因为如果一点
值为3就代表被三个正方形所覆盖,那么选择这个位置就能盖三个点
#include<bits/stdc++.h>
#define maxn 400005
#define mod 1000000007
#define ld (d<<1)
#define rd (d<<1|1)
using namespace std;
typedef long long ll;
struct sss
{
ll l,r,h;
ll val;
sss(){};
sss(ll a,ll b,ll c,ll d){
l=a;
r=b;
h=c;
val=d;
};
}ss[maxn*];
ll X[maxn*];
ll n,k;
ll num;
int cmp(struct sss x,struct sss y){
if(x.h==y.h) return x.val>y.val;
return x.h<y.h;
}
ll sum[maxn*],cnt[*maxn];
ll xx[maxn];
void push_up(int id)
{
sum[id]=max(sum[id*],sum[id*+])+cnt[id];
return ;
}
void modify(int ql,int qr,int flag,int l,int r,int id)
{
//cout<<ql<<" "<<qr<<" "<<l<<" "<<r<<endl;
if(ql<=l&&r<=qr)
{
sum[id]+=flag;
cnt[id]+=flag;
//push_up(id);
return ;
}
int mid=(l+r)/;
if(ql<=mid)
{
modify(ql,qr,flag,l,mid,*id);
}
if(qr>mid)
{
modify(ql,qr,flag,mid+,r,*id+);
}
push_up(id);
return ;
}
int main(){
scanf("%lld%lld",&n,&k);
ll x,y;
for(int i=;i<n;i++){
scanf("%lld%lld",&x,&y);
X[num]=x;
ss[num++]=sss(x,x+k,y,(ll));
X[num]=x+k;
ss[num++]=sss(x,x+k,y+k,(ll)(-));
}
sort(ss,ss+num,cmp);
sort(X,X+num);
int m=unique(X,X+num)-X;
ll mx=;
for(int i=;i<num;i++){
int l=lower_bound(X,X+m,ss[i].l)-X;
int r=lower_bound(X,X+m,ss[i].r)-X;
if(l<=r)
modify(l,r,ss[i].val,,m-,);
mx = max(mx,sum[]);
}
printf("%lld",mx);
}
Comet OJ 茶颜悦色 线段树+扫描线(矩形覆盖最多点+优化)的更多相关文章
- cometoj 茶颜悦色|扫描线+懒惰标记
传送门 题目描述 茶颜悦色也太好喝了!鸡尾酒在长沙的各种茶颜悦色的店铺中流连忘返.他发现长沙有炒鸡多的茶颜悦色店,走两步就能遇到一家. “方圆一公里能有十家茶颜悦色!”鸡尾酒感叹了起来. 于是他想到了 ...
- hdu 1828 Picture(线段树扫描线矩形周长并)
线段树扫描线矩形周长并 #include <iostream> #include <cstdio> #include <algorithm> #include &l ...
- HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)
版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...
- hdu1828 Picture(线段树+扫描线+矩形周长)
看这篇博客前可以看一下扫描线求面积:线段树扫描线(一.Atlantis HDU - 1542(覆盖面积) 二.覆盖的面积 HDU - 1255(重叠两次的面积)) 解法一·:两次扫描线 如图我们可以 ...
- ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)
ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...
- poj 3277 City Horizon (线段树 扫描线 矩形面积并)
题目链接 题意: 给一些矩形,给出长和高,其中长是用区间的形式给出的,有些区间有重叠,最后求所有矩形的面积. 分析: 给的区间的范围很大,所以需要离散化,还需要把y坐标去重,不过我试了一下不去重 也不 ...
- 【学习笔记】线段树—扫描线补充 (IC_QQQ)
[学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...
- 线段树扫描线(一、Atlantis HDU - 1542(覆盖面积) 二、覆盖的面积 HDU - 1255(重叠两次的面积))
扫描线求周长: hdu1828 Picture(线段树+扫描线+矩形周长) 参考链接:https://blog.csdn.net/konghhhhh/java/article/details/7823 ...
- 【Codeforces720D】Slalom 线段树 + 扫描线 (优化DP)
D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
随机推荐
- BUUCTF平台:RSA
RSA import gmpy2 def Decrypt(c,e,p,q): L=(p-1)*(q-1) d=gmpy2.invert(e,L) n=p*q m=gmpy2.powmod(c,d,n) ...
- nginx中如何设置gzip(总结)
nginx中如何设置gzip(总结) 一.总结 一句话总结: 真正用的时候,花一小点时间把gzip的各个字段的意思都看一下,会节约大量时间 直接gzip on:在nginx的配置中就可以开启gzip压 ...
- javascript获取网页宽高,屏幕宽高,屏幕分辨率等
<script> var s = ""; s += "\r\n网页可见区域宽:"+ document.body.clientWidth; s + ...
- 基于Diff机制的多个状态合并
1. 场景 假设一个系统System在某一时刻的状态可以用State A来表示[State里面包含着一些元素的集合]: 1: State A = [element_0, element_1,……,el ...
- latex 查找缺失的库文件
app-portage/pfl contains a program to search in an online database for a Gentoo package containing a ...
- Ajax 中Post 与 Get的 实例
Ajax中 Post 与 Get 实例 Ajax的POST实例,index.html <html> <head> <script type="text/ja ...
- 解决Ubuntu与Windows双系统时间不同步问题
目录 1.Windows修改法 1.1设置UTC 1.2恢复LocalTime 2.Ubuntu修改法 2.1设置LocalTime 2.2恢复UTC 切换系统后,往往发现时间差了8小时.这恰恰是北京 ...
- js 监听input 实现数据绑定
<!DOCTYPE html> <html> <head> <script> function checkField(val) { //alert(&q ...
- java环境搭建与安装开发工具全教程
当前端的后台搭档是做java后台时,这时就需要自己搭建一个java开发环境,和安装eclipse了. 那么,一般这些开发环境在一个开发团队中是统一的.正规完善的公司还会有自己软件库和安装配置文档.这时 ...
- HDU 4886 TIANKENG’s restaurant(Ⅱ) ( 暴力+hash )
TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 130107/65536 K (Ja ...