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 即要找出所有的重心,并且找出重心 ...
随机推荐
- JavaScript中的Array对象
1.创建Array对象创建Array对象的语法var 数组名 = new Array();定义数组之后,就需要向数组中添加元素,格式如下数组名[<下标>]=值: 2.Array对象属性Ar ...
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...
- WPF:如何实现单实例的应用程序(Single Instance)
原文:WPF:如何实现单实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现单实例(single instan ...
- Powershell 设置数值格式 1
设置数值格式 1 6 6月, 2013 在 Powershell tagged 字符串 / 数字 / 文本 / 日期 / 格式化 by Mooser Lee 格式化操作符 -f 可以将数值插入到字符 ...
- 深入理解Java的protected修饰符
其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类 ...
- tyvj1038忠诚
描述 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨, ...
- hdu4405:概率dp
题意: 总共有n+1个格子:0-n 初始情况下在 0号格子 每次通过掷骰子确定前进的格子数 此外 还有一些传送门可以瞬间从 u 点传送到 v 点(必须被传送) 求走到(或超过)n点总共需要掷多少次骰子 ...
- VC++中的类的内存分布(上)
0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...
- phpcms:二、头部尾部包含
1.index.html是默认的首页{template "content","header"}引入头部的模块{template "content&qu ...
- Map的内容按字母顺序排序
map有自带的排序功能,但需要重写排序方法,代码如下: package coreJava.com.shindo.corejava.map; import java.util.ArrayList; im ...