题目: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 茶颜悦色 线段树+扫描线(矩形覆盖最多点+优化)的更多相关文章

  1. cometoj 茶颜悦色|扫描线+懒惰标记

    传送门 题目描述 茶颜悦色也太好喝了!鸡尾酒在长沙的各种茶颜悦色的店铺中流连忘返.他发现长沙有炒鸡多的茶颜悦色店,走两步就能遇到一家. “方圆一公里能有十家茶颜悦色!”鸡尾酒感叹了起来. 于是他想到了 ...

  2. hdu 1828 Picture(线段树扫描线矩形周长并)

    线段树扫描线矩形周长并 #include <iostream> #include <cstdio> #include <algorithm> #include &l ...

  3. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

    版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...

  4. hdu1828 Picture(线段树+扫描线+矩形周长)

    看这篇博客前可以看一下扫描线求面积:线段树扫描线(一.Atlantis HDU - 1542(覆盖面积) 二.覆盖的面积 HDU - 1255(重叠两次的面积))  解法一·:两次扫描线 如图我们可以 ...

  5. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)

    ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...

  6. poj 3277 City Horizon (线段树 扫描线 矩形面积并)

    题目链接 题意: 给一些矩形,给出长和高,其中长是用区间的形式给出的,有些区间有重叠,最后求所有矩形的面积. 分析: 给的区间的范围很大,所以需要离散化,还需要把y坐标去重,不过我试了一下不去重 也不 ...

  7. 【学习笔记】线段树—扫描线补充 (IC_QQQ)

    [学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...

  8. 线段树扫描线(一、Atlantis HDU - 1542(覆盖面积) 二、覆盖的面积 HDU - 1255(重叠两次的面积))

    扫描线求周长: hdu1828 Picture(线段树+扫描线+矩形周长) 参考链接:https://blog.csdn.net/konghhhhh/java/article/details/7823 ...

  9. 【Codeforces720D】Slalom 线段树 + 扫描线 (优化DP)

    D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...

随机推荐

  1. Codeforces 831C--Jury Marks (思维)

    题目链接:http://codeforces.com/problemset/problem/831/C 题意:有一位参赛选手,我们不知道他初始或最后的成绩,但是知道k次评审所加(减)的分数,以及n个在 ...

  2. Asp.Net页面间传值常见的几种方法

    一.QueryString QueryString是一种非常简单的传值方式,他是将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递 ...

  3. vue开发微信公众号--地图

    在最近开发的微信公众号中,要实现一个打卡功能: 由于个人感觉微信SDK里面的地图不太好用,所以使用了腾讯地图. 在项目中引入腾讯地图 1,需要登录腾讯地图网站,注册一个账户,获得一个key. 2,然后 ...

  4. Linux 下查看操作系统信息

    1.uname -a  可显示电脑以及操作系统的相关信息. 2.输入"cat /proc/version",说明正在运行的内核版本. 3.输入"cat /etc/issu ...

  5. drf 分页,获取fk,choise,m2m等字段数据(序列化)

    1.什么是restful规范 是一套规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的的是,以前写增删改查需要写4个接口,restful规范的就是1个接口,根据method的 ...

  6. 2644. 数列 (Standard IO)

    这道题是道数论题,如果想对了的话会很快. 因为这道题实在是没有什么知识点,所以我直接上代码,代码上有很详细的注释: #include<iostream> #include<cstdi ...

  7. How many groups(DP)

    题意: 定义:设M为数组a的子集(元素可以重复),将M中的元素排序,若排序后的相邻两元素相差不超过2,则M为a中的一个块,块的大小为块中的元素个数 给出长度为n的数组a,1<=n<=200 ...

  8. Java享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern)主要用于减少创建的对象数量,并减少内存占用并提高性能. 这种类型的设计模式属于结构模式,因为该模式提供了减少对象计数的方法,从而改善应用的对象结构. 享元 ...

  9. leetcode.排序.347前k个高频元素-Java

    1. 具体题目 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums ...

  10. Python控制台输出带颜色方法

    书写格式,和相关说明如下: 举例: print('\033[0;32;40m欢迎使用学生选课系统\033[0m') try: num = int(input('请输入数字选择功能 :')) excep ...