上海邀请赛的一道题目,看比赛时很多队伍水过去了,当时还想了好久却没有发现这题有什么水题的性质,原来是道成题。 最近学习了下线段树扫描线才发现确实是挺水的一道题。

hdu5091

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <queue>
#include <stdlib.h>
using namespace std;
#define N 10010
#define SN 500000 struct node
{
int x,y;
}g[N]; int n,w,h;
int l[SN],r[SN],mark[SN],num[SN];//肯定是要标号的 int cmp(node t,node t1)
{
return t.y<t1.y;
} void build(int tl,int tr,int s)
{
l[s]=tl; r[s]=tr;
mark[s]=; num[s]=;
if(tl==tr) return ;
int mid=(tl+tr)/;
build(tl,mid,*s);
build(mid+,tr,*s+);
} void up(int s)
{
if(mark[s]>)
{
if(l[s]==r[s])
num[s]=mark[s];
else
{
num[s]=max(num[*s],num[*s+])+mark[s];
}
}
else
{
if(l[s]==r[s])
num[s]=;
else num[s]=max(num[*s],num[*s+]);
}
} void update(int tl,int tr,int sign,int s)
{
if(tl==l[s]&&tr==r[s])
{
mark[s]+=sign;
up(s);
return ;
}
int mid=(l[s]+r[s])/;
if(tr<=mid) update(tl,tr,sign,*s);
else if(tl>mid) update(tl,tr,sign,*s+);
else
{
update(tl,mid,sign,*s);
update(mid+,tr,sign,*s+);
}
up(s);
} int main()
{
while(scanf("%d",&n)&&n>=)
{
scanf("%d%d",&w,&h);
int mxx=-,mix=; for(int i=;i<n;i++)
{
scanf("%d%d",&g[i].x,&g[i].y);
g[i].x+=;
g[i].y+=;//这个没有关系吧
mxx=max(mxx,g[i].x);
mix=min(mix,g[i].x);
} //又有负数 。。。
if(n==)
{
printf("1\n");
continue;
}
sort(g,g+n,cmp);
int ans=;
build(mix,mxx+w,);
update(g[].x,g[].x+w,,);
int i=,j=; while()
{
if(g[j].y-g[i].y<=h) //表示j这边还可以添加
{
update(g[j].x,g[j].x+w,,);
ans=max(ans,num[]);
j++;
if(j>=n) break;
}
else
{
update(g[i].x,g[i].x+w,-,);
i++;
}
}
printf("%d\n",ans);
}
return ;
}

hdu 5091(线段树+扫描线)的更多相关文章

  1. HDU 5091 线段树扫描线

    给出N个点.和一个w*h的矩形 给出N个点的坐标,求该矩形最多能够覆盖多少个点 对每一个点point(x.y)右边生成相应的点(x+w,y)值为-1: 纵向建立线段树,从左到右扫描线扫一遍.遇到点则用 ...

  2. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. hdu 1828 线段树扫描线(周长)

    Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. HDU 5107 线段树扫描线

    给出N个点(x,y).每一个点有一个高度h 给出M次询问.问在(x,y)范围内第k小的高度是多少,没有输出-1 (k<=10) 线段树扫描线 首先离散化Y坐标,以Y坐标建立线段树 对全部的点和询 ...

  5. hdu 1255(线段树 扫描线) 覆盖的面积

    http://acm.hdu.edu.cn/showproblem.php?pid=1255 典型线段树辅助扫描线,顾名思义扫描线就是相当于yy出一条直线从左到右(也可以从上到下)扫描过去,此时先将所 ...

  6. hdu 1542 线段树+扫描线 学习

    学习扫描线ing... 玄学的东西... 扫描线其实就是用一条假想的线去扫描一堆矩形,借以求出他们的面积或周长(这一篇是面积,下一篇是周长) 扫描线求面积的主要思想就是对一个二维的矩形的某一维上建立一 ...

  7. hdu 4419 线段树 扫描线 离散化 矩形面积

    //离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...

  8. hdu 3265 线段树扫描线(拆分矩形)

    题意:        给你n个矩形,每个矩形上都有一个矩形的空洞,所有的矩形都是平行于x,y轴的,最后问所有矩形的覆盖面积是多少. 思路:       是典型的矩形覆盖问题,只不过每个矩形上多了一个矩 ...

  9. HDU 1828 线段树+扫描线(计算矩形周长并)

    题意:给你n个矩形,然后矩形有可能重叠,要你求周长 思路:首先碰到这种矩形在数轴上那么第一反应应该想到的是扫描线, 做周长我们有两种方法 第一种,我们可以分开两部分求,第一遍求x轴上的贡献,第二遍求y ...

随机推荐

  1. 删除提示 FOREIGN KEY 约束引用”

    有时想删除某个表时,提示“无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用”,原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引 ...

  2. Javascript的怪癖

    1.匿名函数在不闭包的情况下this对象为window,而在双匿名闭包的情况下内部匿名函数的this对象为window. 2.在函数中定义变量,在函数外部想使用该变量,如果变量声明时有var,则访问不 ...

  3. Java开发WebService的几种方法--转载

    webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...

  4. LoaderManager使用详解(一)---没有Loader之前的世界

    来源: http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background.html 感谢作者Alex ...

  5. 广播接收者BroadcastReceiver

    BroadcastReceiver与activity,service有完整的生命周期不同,BroadcastReceiver本质上是一系统级别的监听器,专门负责监听各程序发出的broadcast.与程 ...

  6. VMware 11 设置U盘启动,总是找不到physicalDrive1

    问题:VMware 11 设置U盘启动,总是找不到physicalDrive1 先说一下U盘启动的设置:如图 解决方案: 有两个服务没有进行启动,VMware USB Arbitration Serv ...

  7. HDU 1558 Segment set (并查集+线段非规范相交)

    题目链接 题意 : 如果两个线段相交就属于同一集合,查询某条线段所属集合有多少线段,输出. 思路 : 先判断与其他线段是否相交,然后合并. #include <cstdio> #inclu ...

  8. Fiddler手机抓包工具如何设置过滤域名?

    fiddler手机抓包工具如何设置过滤域名?如题.fiddler抓包可以完成我们移动开发者的调试测试需求.所以说抓包尤其重要,但是多余的网页请求和手机的其他链接影响我们手机开发的需求.下面我教大家怎么 ...

  9. Junit4中的新断言assertThat的使用方法

    如果需要是用assertThat需要在项目中引入junit4的jar包.(匹配器和断言方法在junit4的jar包中都能找到,引入就可以了) 下面是常用断言的代码 1 import static or ...

  10. 关于playmaker play animation出现警告 The AnimationClip 'xxx' used by the Animati ...

    转载自网络: 出现这个提示: The AnimationClip 'xxx' used by the Animation component 'xxx' must be marked as Legac ...