HDU 2461 线段树扫描线
给出N个矩形,M次询问
每次询问给出R个。问这R个矩形围成的面积
经典扫面线求面积并,对每次询问的R个点离散化一下
#include "stdio.h"
#include "string.h"
#include "algorithm"
#include "map"
using namespace std; map<int,int>mp; struct P
{
int x1,y1,x2,y2;
}p[21]; struct Mark
{
int l,r,x,dir;
}mark[41]; struct node
{
int l,r,y,s;
}data[410]; int h[50]; bool cmp(Mark a,Mark b)
{
return a.x<b.x;
} void callen(int k)
{
if (data[k].s>0) data[k].y=h[data[k].r]-h[data[k].l];
else
data[k].y=data[k*2].y+data[k*2+1].y;
} void build(int l,int r,int k)
{
int mid;
data[k].l=l;
data[k].r=r;
data[k].y=0;
data[k].s=0; if (l+1==r) return; mid=(l+r)/2; build(l,mid,k*2);
build(mid,r,k*2+1);
} void updata(int l,int r,int k,int op)
{
int mid; if (data[k].l==l && data[k].r==r)
{
data[k].s+=op;
callen(k);
return ;
} mid=(data[k].l+data[k].r)/2; if (r<=mid) updata(l,r,k*2,op);
else
if (l>=mid) updata(l,r,k*2+1,op);
else
{
updata(l,mid,k*2,op);
updata(mid,r,k*2+1,op);
}
callen(k);
} int main()
{
int Case,cnt,i,ii,r,n,m,ans,k;
Case=0;
while (scanf("%d%d",&n,&m)!=EOF)
{
if (n==0 && m==0) break;
for (i=1;i<=n;i++)
scanf("%d%d%d%d",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2); printf("Case %d:\n",++Case);
for (ii=1;ii<=m;ii++)
{
scanf("%d",&r);
for (i=0;i<r;i++)
{
scanf("%d",&k);
mark[i*2].x=p[k].x1;
mark[i*2].l=p[k].y1;
mark[i*2].r=p[k].y2;
mark[i*2].dir=1;
mark[i*2+1].x=p[k].x2;
mark[i*2+1].l=p[k].y1;
mark[i*2+1].r=p[k].y2;
mark[i*2+1].dir=-1;
h[i*2]=p[k].y1;
h[i*2+1]=p[k].y2;
} sort(h,h+r*2);
cnt=unique(h,h+r*2)-h; for (i=0;i<cnt;i++)
mp[h[i]]=i;
sort(mark,mark+r*2,cmp);
for (i=0;i<r*2;i++)
{
mark[i].l=mp[mark[i].l];
mark[i].r=mp[mark[i].r];
}
ans=0;
build(0,cnt,1);
updata(mark[0].l,mark[0].r,1,mark[0].dir); for (i=1;i<r*2;i++)
{
ans+=(mark[i].x-mark[i-1].x)*data[1].y;
updata(mark[i].l,mark[i].r,1,mark[i].dir);
}
printf("Query %d: %d\n",ii,ans);
}
printf("\n");
}
return 0;
}
HDU 2461 线段树扫描线的更多相关文章
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 1828 线段树扫描线(周长)
Picture Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 5091(线段树+扫描线)
上海邀请赛的一道题目,看比赛时很多队伍水过去了,当时还想了好久却没有发现这题有什么水题的性质,原来是道成题. 最近学习了下线段树扫描线才发现确实是挺水的一道题. hdu5091 #include &l ...
- HDU 5107 线段树扫描线
给出N个点(x,y).每一个点有一个高度h 给出M次询问.问在(x,y)范围内第k小的高度是多少,没有输出-1 (k<=10) 线段树扫描线 首先离散化Y坐标,以Y坐标建立线段树 对全部的点和询 ...
- hdu 1255(线段树 扫描线) 覆盖的面积
http://acm.hdu.edu.cn/showproblem.php?pid=1255 典型线段树辅助扫描线,顾名思义扫描线就是相当于yy出一条直线从左到右(也可以从上到下)扫描过去,此时先将所 ...
- HDU 5091 线段树扫描线
给出N个点.和一个w*h的矩形 给出N个点的坐标,求该矩形最多能够覆盖多少个点 对每一个点point(x.y)右边生成相应的点(x+w,y)值为-1: 纵向建立线段树,从左到右扫描线扫一遍.遇到点则用 ...
- hdu 1542 线段树+扫描线 学习
学习扫描线ing... 玄学的东西... 扫描线其实就是用一条假想的线去扫描一堆矩形,借以求出他们的面积或周长(这一篇是面积,下一篇是周长) 扫描线求面积的主要思想就是对一个二维的矩形的某一维上建立一 ...
- hdu 4419 线段树 扫描线 离散化 矩形面积
//离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...
- hdu 3265 线段树扫描线(拆分矩形)
题意: 给你n个矩形,每个矩形上都有一个矩形的空洞,所有的矩形都是平行于x,y轴的,最后问所有矩形的覆盖面积是多少. 思路: 是典型的矩形覆盖问题,只不过每个矩形上多了一个矩 ...
随机推荐
- HDU_3732_(多重背包)
Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 梦想CAD控件自定义实体实现
一.增加自定义实体对象 调用DrawCustomEntity函数,绘制一个自定义实体对象. 下面代码绘制一个自定义实体,C#代码实现如下: private void DrawMlineCommand( ...
- oracle 安装准备
1.选择数据库 (官网查询支持的操作系统) 2.选择系统 (官网查询支持的硬件)(更新补丁) 3.选择硬件 (io性能测试--oracle 大量小文件读写) 4.oracle 升级(和打补丁) 5.o ...
- CMU Database Systems - Two-phase Locking
首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本 ...
- pringboot开启找回Run Dashboard
代码中加入 <option name="configurationTypes"> <set> <option value="SpringBo ...
- HDU - 6264 - Super-palindrome(思维)
题意: 给出一个字符串,使得所有的奇数连续子串为回文串,输出最小变化次数 思路: 分析过后,只存在两种情况,1全部为一种字母,2形如abab交替类型 对于奇数位和偶数位单独计数,只需计算出奇数位或者偶 ...
- Java中对象流使用的一个注意事项
再写jsp的实验作业的时候,需要用到java中对象流,但是碰到了之前没有遇到过的情况,改bug改到崩溃!!记录下来供大家分享 如果要用对象流去读取一个文件,一定要先判断这个文件的内容是否为空,如果为空 ...
- ConcurrentHashMap笔记
概览: 内部存储的数据结构为:数组+链表+红黑树,图示: 重要的属性(内部类): //存放元素的数组 transient volatile Node<K,V>[] table; //数组中 ...
- Python爬虫入门教程第七讲: 蜂鸟网图片爬取之二
蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文 ...
- Django 数据库操作之数据库连接
修改settings.py文件 """ Django settings for db_operation_demo project. Generated by 'djan ...