sgu316Kalevich Strikes Back(线段树+扫描线)
做法:总体想法是求出一个矩形的面积以及它所包含的矩形,然后用自己的面积减掉所包含的。主要问题是怎样求解它所包含的矩形。
因为是没有相交点的,可以利用扫描线的方法去做,类似染色,当前段如果是x色,也就是第x个矩形,那么再把他染成y颜色时,说明x包含y,而当扫到y的上边时,这一段又恢复到x色。标记一下被包含的矩形,记录所包含的矩形。
因为会有恢复染色操作,up需要时时更新,左儿子和右儿子一样颜色时就可以合并为一段。
;
}
void down(int w)
{
if(s[w]!=-)
{
s[w<<] = s[w<<|] = s[w];
s[w] = -;
}
}
void build(int l,int r,int w)
{
s[w] = ;
if(l==r)
{
return ;
}
int m = (l+r)>>;
build(l,m,w<<);
build(m+,r,w<<|);
up(w);
}
int update(int a,int b,int d,int l,int r,int w)
{
if(a<=l&&b>=r)
{
int k = s[w];
// cout<<l<<" "<<r<<" "<<s[w]<<endl;
s[w] = d;
return k;
}
down(w);
int m = (l+r)>>;
int k = ;
if(a<=m)
k = update(a,b,d,l,m,w<<);
if(b>m)
k = update(a,b,d,m+,r,w<<|);
up(w);
return k;
}
int main()
{
int n,w,h,i,j;
scanf("%d%d%d",&n,&w,&h);
int g = ;
for(i = ;i <= n; i++)
{
int x1,x2,y1,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
p[++g] = node(x1,x2,min(y1,y2),i);
a[g] = x1;
p[++g] = node(x1,x2,max(y1,y2),-i);
a[g] = x2;
sum[i] = (LL)abs(x1-x2)*abs(y1-y2);
}
sort(p+,p+g+);
sort(a+,a+g+);
int o = ;
f[a[]] = ++o;
for(i = ; i <= g;i++)
{
if(a[i]!=a[i-])
{
f[a[i]] = ++o;
val[o] =a[i];
}
}
build(,o,);
for(i = ; i <= g;i++)
{
int l = min(f[p[i].x1],f[p[i].x2]);
int r = max(f[p[i].x2],f[p[i].x1]);
//cout<<l<<" "<<r<<endl;
if(l<=r)
{
if(p[i].d>)
{
int k = update(l,r,p[i].d,,o,);
ed[k].push_back(p[i].d);
pre[p[i].d] = k;
//cout<<k<<" "<<p[i].d<<endl;
}
else
{
update(l,r,pre[-p[i].d],,o,);
}
//fresh(l,r,1,o,1);
}
}
sum[] =(LL)w*h;
for(i = ;i <= n; i++)
ans[i] = sum[i];
for(i = ; i <= n; i++)
{
for(j = ;j < ed[i].size() ; j++)
{
int v = ed[i][j];
ans[i]-=sum[v];
}
}
sort(ans,ans+n+);
for(i = ;i < n; i++)
printf("%I64d ",ans[i]);
printf("%I64d\n",ans[n]);
return ;
}
sgu316Kalevich Strikes Back(线段树+扫描线)的更多相关文章
- SGU 319 Kalevich Strikes Back(线段树扫描线)
题目大意: n个矩形,将一个大矩形分成 n+1 块.矩形之间不重合,可是包括.求这n+1个矩形的面积 思路分析: 用线段树记录他们之间的父子关系.然后dfs 计算面积. 当给出的矩形上边的时候,就要记 ...
- 【Codeforces720D】Slalom 线段树 + 扫描线 (优化DP)
D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
- Codeforces VK CUP 2015 D. Closest Equals(线段树+扫描线)
题目链接:http://codeforces.com/contest/522/problem/D 题目大意: 给你一个长度为n的序列,然后有m次查询,每次查询输入一个区间[li,lj],对于每一个查 ...
- 【POJ-2482】Stars in your window 线段树 + 扫描线
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11706 Accepted: ...
- HDU 4419 Colourful Rectangle --离散化+线段树扫描线
题意: 有三种颜色的矩形n个,不同颜色的矩形重叠会生成不同的颜色,总共有R,G,B,RG,RB,GB,RGB 7种颜色,问7种颜色每种颜色的面积. 解法: 很容易想到线段树扫描线求矩形面积并,但是如何 ...
- BZOJ-3228 棋盘控制 线段树+扫描线+鬼畜毒瘤
3228: [Sdoi2008]棋盘控制 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 23 Solved: 9 [Submit][Status][D ...
- BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞
看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...
- hdu 5091(线段树+扫描线)
上海邀请赛的一道题目,看比赛时很多队伍水过去了,当时还想了好久却没有发现这题有什么水题的性质,原来是道成题. 最近学习了下线段树扫描线才发现确实是挺水的一道题. hdu5091 #include &l ...
- POJ1151+线段树+扫描线
/* 线段树+扫描线+离散化 求多个矩形的面积 */ #include<stdio.h> #include<string.h> #include<stdlib.h> ...
- POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]
题意:求矩形面积并 分析:使用线段树+扫描线...因为坐标是浮点数的,因此还需要离散化! 把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用col表示该区间有多少个下边,sum代表该区 ...
随机推荐
- Normalize.css 与传统的 CSS Reset 有哪些区别?
CSS Reset 是革命党,CSS Reset 里最激进那一派提倡不管你小子有用没用,通通给我脱了那身衣服,凭什么你 body 出生就穿一圈 margin,凭什么你姓 h 的比别人吃得胖,凭什么你 ...
- 修改SO
1.如果在jni中定义的是int型的数据,比如: JNIEXPORT jint JNICALL Java_com_ggndktest1_JniGg_getCoin (JNIEnv * env, job ...
- bzoj 1127 [POI2008]KUP——思路(悬线法)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 大于2*K的视为不能选的“坏点”.有单个格子满足的就直接输出. 剩下的都是<K的 ...
- 九、myeclipse开发背景保护色设置
window->preferences->Editors->Text Editors->Background color 背景颜色向你推荐: 色调:85.饱和度:1 2 3.亮 ...
- 你忘记的java运算符
当整数被0除时会得到一个无穷大,或者nan, 所以会抛出数据溢出的异常.
- 页面跳转问题,多次 push 到新的页面的问题的解决方法
今日在做一个扫一扫的功能,突然发现多次点击了扫一扫的图片后,造成多次触发轻拍手势,就多次push到新的页面,本想在轻拍手势内对push的进行拦截,但是又觉得如果有好多的地方都要实现对该问题的解决岂不是 ...
- JQuery学习笔记(三)遍历 DOM
遍历 DOM jQuery 提供了多种遍历 DOM 的方法.遍历方法中最大的种类是树遍历(tree-traversal). 向上父节点parent,向下子节点child,同胞next和pre 缩写搜索 ...
- HDU - 1071 - The area - 高斯约旦消元法 - 自适应辛普森法积分
http://acm.hdu.edu.cn/showproblem.php?pid=1071 解一个给定三个点的坐标二次函数某区域的积分值. 设出方程之后高斯消元得到二次函数.然后再消元得到直线. 两 ...
- 201621123016《Java程序设计》第二周学习总结
1. 本周学习总结 1.本周学习重点: 字符串常量池:这是java中为减少字符串的建立而设计的,在没有使用new构建字符串时,jvm会从字符串常量池查找其值,如果没有则会创建这个字符串再把其放在字符串 ...
- tinyxml一些应注意的问题
今天在对使用tinyxml库的程序调试的时候,出现的一些问题让人很纠结,特记以此... 在对TixmlDocument创建时我是用new创建的,然后在用完之后我用delete释放掉,可是用gdb调试 ...