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 即要找出所有的重心,并且找出重心 ...
随机推荐
- keil C语言与汇编语言混合编程
C与汇编混合编程主要有以下几种:(1)C语言中嵌入汇编(2)无参数传递的函数调用(3)有参数传递的函数调用 一.C语言中嵌入汇编 1.在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #prag ...
- PDO如何选择其他数据库的驱动
$dsn = "mysql(用的mysql的驱动):dbname=testdb(连接数据库名称);host=127.0.0.1(IP地址,本地是:localhost)"
- JAVA并发实现四(守护线程和线程阻塞)
守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台 ...
- NetAnalyzer笔记 之 一. 开篇语
[创建时间:2015-08-26 22:00:12] NetAnalyzer下载地址 第一次写技术相关的博客,不足之处还请担待并告知. 在开始之前,先简单介绍一下NetAnalyzer, NetAna ...
- mysql学习之五:sql语句学习3
好吧,大家认为这样的字体还是比較好看,全部我们就换这样的字体了. INSERT INTO 语句用于向表格中插入新的行. 语法 INSERT INTO 表名称 VALUES (值1, 值2,....) ...
- .NET--接口设计
我们学习.net视频的时候,老师讲的是"介面设计",有意思的是,这里的介面不是我们想象中的界面的意思,而是接口的意思. 由于视频是Micorsoft公司做的,所以整个视频看下来.仅 ...
- compass模块
Compass核心模块Reset :重置CSS模块 @import "compass/reset" Layout :页面布局的控制能力 @import "compass/ ...
- DataTable复制自身行
在我们工作的过程中有可能要使用DataTable产生一些重复数据(在不重复读取数据库的情况下) 无废话,直接上代码 DataTable复制自身一行(目的产生重复数据),已测试通过可直接复制 /// & ...
- cookie 的Domain删除失败的问题
最近接手一个老项目,项目中使用的是cookie来做的处理的,新增的时候cookie添加了域, 但是删除的时候没有添加域,导致删除cookie的时候一直失败!还有cookie的创建与删除,应该都必需经过 ...
- React-nwb的使用
一.查看nwb的版本 nwb -v 二.创建一个react项目 nwb new react-app react-demo 三.启动项目 nwb serve