sgu Kalevich Strikes Back
这道题就是求一个大矩形被n个矩形划分成n+1个部分的面积,这些矩形之间不会相交,可能包含。。
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#define maxn 120100
using namespace std; long long s[maxn];
vector<int>g[maxn];
int pre[maxn];
int X[maxn];
int n,m,w,h,x1,y1,x2,y2;
struct node
{
int l,r;
int ll,rr;
int cover;
}tree[maxn*]; struct line
{
int y,x1,x2,lr;
bool operator <(const line &a)const
{
return y<a.y;
}
}p[maxn]; void build(int i,int l,int r)
{
tree[i].l=l;
tree[i].r=r;
tree[i].ll=X[l];
tree[i].rr=X[r];
tree[i].cover=;
if(r-l==) return ;
int mid=(l+r)>>;
build(i<<,l,mid);
build(i<<|,mid,r);
}
void down(int i)
{
if(tree[i].l+==tree[i].r) return;
if(tree[i].cover!=-)
{
tree[i<<].cover=tree[i<<|].cover=tree[i].cover;
tree[i].cover=-;
}
}
void update(int i, line a)
{
if(tree[i].ll==a.x1&&tree[i].rr==a.x2)
{
if(a.lr>)
tree[i].cover=a.lr;
else
tree[i].cover=pre[-a.lr];
return ;
}
down(i);
if(a.x2<=tree[i<<].rr) update(i<<,a);
else if(a.x1>=tree[i<<|].ll) update(i<<|,a);
else
{
line tmp=a;
tmp.x2=tree[i<<].rr;
update(i<<,tmp);
tmp=a;
tmp.x1=tree[i<<|].ll;
update(i<<|,tmp);
}
} int search1(int i,line m)
{
if(tree[i].cover!=-)
{
return tree[i].cover;
}
if(m.x2<=tree[i<<].rr) return search1(i<<,m);
else if(m.x1>=tree[i<<|].ll) return search1(i<<|,m);
else
{
line tmp;
tmp=m;
tmp.x2=tree[i<<].rr;
return search1(i<<,tmp);
}
}
void dfs(int u)
{
for(int i=; i<(int)g[u].size(); i++)
{
int v=g[u][i];
s[u]-=s[v];
dfs(v);
}
} int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<=n; i++)
{
g[i].clear();
}
scanf("%d%d",&w,&h);
s[]=(long long)w*h;
int t1=;
for(int i=; i<=n; i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x1>x2)swap(x1,x2);
if(y1>y2)swap(y1,y2);
s[i]=(long long)(x2-x1)*(y2-y1);
p[t1].y=y1;
p[t1].x1=x1;
p[t1].x2=x2;
p[t1].lr=i;
X[t1++]=x1;
p[t1].y=y2;
p[t1].x1=x1;
p[t1].x2=x2;
p[t1].lr=-i;
X[t1++]=x2;
}
sort(X,X+t1);
t1=unique(X,X+t1)-X;
build(,,t1-);
sort(p,p+*n);
for(int i=; i<*n; i++)
{
if(p[i].lr>)
{
pre[p[i].lr]=search1(,p[i]);
g[pre[p[i].lr]].push_back(p[i].lr);
}
update(,p[i]);
}
dfs();
sort(s,s+n+);
for(int i=; i<=n; i++)
{
if(i==n) printf("%I64d\n",s[i]);
else printf("%I64d ",s[i]);
}
}
return ;
}
sgu Kalevich Strikes Back的更多相关文章
- SGU 319. Kalevich Strikes Back (线段树)
319. Kalevich Strikes Back Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...
- SGU 319 Kalevich Strikes Back(线段树扫描线)
题目大意: n个矩形,将一个大矩形分成 n+1 块.矩形之间不重合,可是包括.求这n+1个矩形的面积 思路分析: 用线段树记录他们之间的父子关系.然后dfs 计算面积. 当给出的矩形上边的时候,就要记 ...
- SGU 495. Kids and Prizes
水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...
- ACM: SGU 101 Domino- 欧拉回路-并查集
sgu 101 - Domino Time Limit:250MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Desc ...
- 【SGU】495. Kids and Prizes
http://acm.sgu.ru/problem.php?contest=0&problem=495 题意:N个箱子M个人,初始N个箱子都有一个礼物,M个人依次等概率取一个箱子,如果有礼物则 ...
- SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...
- SGU 422 Fast Typing(概率DP)
题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...
- sgu 104 Little shop of flowers 解题报告及测试数据
104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...
- 树形DP求树的重心 --SGU 134
令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...
随机推荐
- C 和 C++的 不同
转自: http://studytipsandtricks.blogspot.com/2012/05/15-most-important-differences-between-c.html Basi ...
- 磁珠(FB)的原理
磁珠的主要原料为铁氧体.铁氧体是一种立方晶格结构的亚铁磁性材料.铁氧体材料为铁镁合金或铁镍合金,它的制造工艺和机械性能与陶瓷相似,颜色为灰黑色.电磁干扰滤波器中经常使用的一类磁芯就是铁氧体材料,许多厂 ...
- Delphi流的操作 转
一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实,流 ...
- Temporary failure in name resolution
公司搬家,在一台测试机上执行git clone,出现错误 ssh: Could not resolve hostname **: Temporary failure in name resolutio ...
- Java 四种线程池的用法分析
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...
- 使用css框架的优缺点
使用css框架的优点 1.加速开发 CSS框架提供通用的代码(如reset,和移动端开发的一些常用设置)和许多丰富的UI组件样式——因此我们不需要从头开始写. 2.无兼容性烦恼 CSS框架解决了各个浏 ...
- 详细介绍如何使用kindEditor编辑器
今天群里的朋友问我能不能写个kindEditor编辑器的使用教程,说是弄了半天没有搞定.由于PHP啦后台正好用了这个编辑器,我有写经验,正好教他的同时写出来分享给大家. kindEditor编辑器是一 ...
- Web Service 初步了解
Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通, ...
- (转载)XML Tutorial for iOS: How To Choose The Best XML Parser for Your iPhone Project
There are a lot of options when it comes to parsing XML on the iPhone. The iPhone SDK comes with two ...
- PHP设计模式笔记八:原型模式 -- Rango韩老师 http://www.imooc.com/learn/236
原型模式 概述: 1.与工厂模式作用类似,都是用来创建对象 2.与工厂模式的实现不同,原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作 3 ...