CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019) D茶颜悦色 (扫描线,求正方形内的点)

题目链接:https://cometoj.com/contest/59/problem/D?problem_id=2713

 

题目描述

 

茶颜悦色也太好喝了!鸡尾酒在长沙的各种茶颜悦色的店铺中流连忘返。他发现长沙有炒鸡多的茶颜悦色店,走两步就能遇到一家。

“方圆一公里能有十家茶颜悦色!”鸡尾酒感叹了起来。

于是他想到了一个问题:最密集的地方,能有多少家茶颜悦色的店?

鸡尾酒将长沙地图用一个二维平面表示,他统计出了每个茶颜悦色店铺的坐标。

他想知道,在一个边长为 k且底边平行于 x轴的正方形中,最多有多少家茶颜悦色。

若茶颜悦色恰好在正方形的边上,也算在正方形之中。

输入描述

 

输入第一行包含两个正整数 n, k(n \le10^{5},k\le10^{9}) 代表茶颜悦色店的数量和正方形的边长。

接下来 n 行每行有两个整数,描述一家茶颜悦色店的坐标 x_{i},y_{i}(0 \le x_{i}, y_{i} \le 10^{9})保证不会出现重复的坐标。

输出描述

 

输出一行一个正整数表示答案。

样例输入 1 

4 2
1 1
3 1
3 4
2 2

样例输出 1

3

提示

以(1,0)(3,0)(1,2)(3,2)四个点为顶点组成的边长为2的正方形,包括了3家茶颜悦色店。

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define clr0(x) memset(x,0,sizeof(x))
#define clr1(x) memset(x,-1,sizeof(x))
#define eps 1e-9
const double pi = acos(-1.0);
typedef long long LL;
#define lson i*2,l,m
#define rson i*2+1,m+1,r
const int MAXN=200000+5;//因为点有1W个,所以扫描线2W个,不同的Y坐标最多有2W个
int cnt[MAXN*4],sum[MAXN*4];
double Y[MAXN];
struct seg
{
    double l,r,h;
    int d;
    seg(){}
    seg(double a,double b,double c,int d):l(a),r(b),h(c),d(d){}
    bool operator <(const seg&b)const
    {
        if(h == b.h) return d>b.d;
        return h>1;
    if(ql<=m) update(ql,qr,v,lson);
    if(m

 

你可能感兴趣的:(线段树)