传送门

题目描述

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

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

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

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

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

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

输入描述

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

接下来 n 行每行有两个整数,描述一家茶颜悦色店的坐标 xi,yi​ (0≤xi​,yi​≤10^9) 保证不会出现重复的坐标。

输出描述

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

样例输入 1

4 2
1 1
3 1
3 4
2 2

样例输出 1

 3

题意:一个二维平面中有n个点,现在有个位置任意的k*k的矩形,问它里面最多能有多少点。

题解:我们可以把这个题转化为以(xi,yi)为左下角坐标,(xi+k,yi+k)为右上角坐标的矩形中,最多能有几个个矩形重合。然后我们就可以愉快的用扫描线来处理了:我们将竖直的直线从左到右依次扫过各个矩形,扫过矩形左边界时cnt++,扫过右边界时cnt--。维护最大cnt值即可。

   这题要注意的是:恰好在正方形的边上,也算在正方形之中。也就是说如果有一个矩形的右边界与另一个矩形的左边界重合的话,我们先加再减。对于这一点我们可以在存矩阵右边界时使其加一,也可以排序线段时处理。

   这题与POJ2482窗内的星星相似,不过一个算边界一个不算边界,一个先加后减一个先减后加。

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2e5 + ;
struct node{
ll x,y1,y2;
int val;
node(){}
node(ll x,ll y1,ll y2,int val) {
this->x = x; this->y1 = y1; this->y2 = y2; this->val = val;
}
bool operator <(const node &t)const {
//if (x==t.x) return val > t.val; //排序时处理
return x<t.x;
}
};
struct Tree{
int l,r,cnt,lazy;
}T[N<<];
vector<ll> v;
vector<node> a;
void build(int rt,int l,int r) {
T[rt].l = l; T[rt].r = r;
T[rt].cnt = ; T[rt].lazy = ;
if (l==r) return;
int mid = (l+r)>>;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
}
void down(int rt) {
if (T[rt].lazy) {
T[rt<<].cnt += T[rt].lazy;
T[rt<<].lazy += T[rt].lazy;
T[rt<<|].cnt += T[rt].lazy;
T[rt<<|].lazy += T[rt].lazy;
T[rt].lazy = ;
}
}
void update(int rt,int l,int r,int val) {
if (l <= T[rt].l && r >= T[rt].r) {
T[rt].cnt += val;
T[rt].lazy += val;
return;
}
down(rt);
int mid = (T[rt].l+T[rt].r)>>;
if (l <= mid) update(rt<<,l,r,val);
if (r > mid) update(rt<<|,l,r,val);
T[rt].cnt = max(T[rt<<].cnt,T[rt<<|].cnt);
}
int main() {
int n;
ll k,x,y;
scanf("%d%lld",&n,&k);
for (int i = ; i < n; i++) {
scanf("%lld%lld",&x,&y);
v.push_back(y);
v.push_back(y+k);
a.push_back(node(x,y,y+k,));
a.push_back(node(x+k+,y,y+k,-)); //存的时候右边界x坐标+1
}
sort(a.begin(),a.end());
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
n = v.size();
build(,,n);
n = a.size();
int ans = ;
for (int i = ; i < n; i++) {
int l = lower_bound(v.begin(),v.end(),a[i].y1) - v.begin();
int r = lower_bound(v.begin(),v.end(),a[i].y2) - v.begin();
update(,l,r,a[i].val);
ans = max(ans,T[].cnt);
}
printf("%d\n",ans);
return ;
}


cometoj 茶颜悦色|扫描线+懒惰标记的更多相关文章

  1. Comet OJ 茶颜悦色 线段树+扫描线(矩形覆盖最多点+优化)

    题目:https://www.cometoj.com/contest/59/problem/D?problem_id=2713 题意:给你一个正方形,然后给你n个点,这个正方形能随意放哪,要求那个正方 ...

  2. ACWing 248. 窗内的星星|扫描线+懒惰标记

    传送门 题目描述 在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数). 求用宽为W.高为H的矩形窗户(W,H为正整数)能圈住的星星的亮度总和最大是多少.(矩形边界上的星 ...

  3. 【HDU 4614】Vases and Flowers(线段树区间更新懒惰标记)

    题目0到n-1的花瓶,操作1在下标a开始插b朵花,输出始末下标.操作2清空[a,b]的花瓶,求清除的花的数量.线段树懒惰标记来更新区间.操作1,先查询0到a-1有num个空瓶子,然后用线段树的性质,或 ...

  4. bzoj1251 序列终结者(Splay Tree+懒惰标记)

    Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...

  5. 【POJ】3468 A Simple Problem with Integers ——线段树 成段更新 懒惰标记

    A Simple Problem with Integers Time Limit:5000MS   Memory Limit:131072K Case Time Limit:2000MS Descr ...

  6. 【HDU】4092 Nice boat(多校第四场1006) ——线段树 懒惰标记

    Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  7. poj3468 线段树的懒惰标记

    题目链接:poj3468 题意:给定一段数组,有两种操作,一种是给某段区间加c,另一种是查询一段区间的和 思路:暴力的方法是每次都给这段区间的点加c,查询也遍历一遍区间,复杂度是n*n,肯定过不去,另 ...

  8. FZU-1608 Huge Mission 线段树(更新懒惰标记)

    题目链接: https://cn.vjudge.net/problem/FZU-1608 题目大意: 长度n,m次操作:每次操作都有三个数:a,b,c:意味着(a,b]区间单位长度的价值为c,若某段长 ...

  9. hdu1698 Just a Hook (线段树区间更新 懒惰标记)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

随机推荐

  1. 2015年NOIP普及组复赛题解

    题目涉及算法: 金币:入门题: 扫雷游戏:入门题: 求和:简单数学推导: 推销员:贪心. 金币 题目链接:https://www.luogu.org/problem/P2669 入门题,直接开一个循环 ...

  2. 2013年NOIP普及组复赛题解

    题目涉及算法: 计数问题:枚举: 表达式求值:栈: 小朋友的数字:动态规划: 车站分级:最长路. 计数问题 题目链接:https://www.luogu.org/problem/P1980 因为数据量 ...

  3. JS中数组声明

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. SAX解析xml (遍历DOM树各节点)

    本文参考 http://yangjunfeng.iteye.com/blog/401377 1. books.xml <?xml version="1.0" encoding ...

  5. 【u202】家庭作业

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分.每个作业的截止日期 ...

  6. Canvas学习实践:一款简单的动画游戏

    最近学习了下Canvas绘图...突发奇想就有了下面这款简单的小游戏,纯属娱乐~ 废话不多说,直接上代码: <!DOCTYPE html> <html lang="zh&q ...

  7. 有状态无状态回话bean

    1.有状态(Stateful) 可以在不同的方法调用间保持针对各个客户端的状态 与客户端的联系必须被维持,这样做开销要大一些 有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的 ...

  8. 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)

    牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...

  9. P3803 FFT求多项式系数

    P3803 FFT求多项式系数 传送门:https://www.luogu.org/problemnew/show/P3803 题意: 这是一道FFT模板题,求多项式系数 题解: 对a和b的系数求一个 ...

  10. 【Docker Compose】简介与安装

    1.简介 Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置 ...