[日常摸鱼]poj1151Atlantis-扫描线
题意:给一堆长宽平行于坐标轴的长方形求并的面积
我个沙茶快写了一晚上…
大概思想就是先根据$y$坐标排个序,把$y$坐标离散化一下,放到线段树里面维护,这里的写法是让线段树的节点储存这个点对应的整段线段的信息,更新的时候如果不行就把线段拆开,以及注意一些细节(比如这里右孩子的区间是[mid,r]而不是[mid+1,r]因为下标其实应该是连续的实数)
我也讲不清楚了具体看代码…
#include<cstdio>
#include<algorithm>
#define rep(i,n) for(register int i=1;i<=n;i++)
#define REP(i,a,b) for(register int i=a;i<=b;i++)
#define debug(x) printf("%s = %d\n",#x,x)
using namespace std;
typedef double dl;
const int N=105;
struct tree
{
dl l,r,s;int c;
}tr[N<<3];
struct Line
{
dl x,y1,y2;int f;
Line(dl x=0,dl y1=0,dl y2=0,int f=0):x(x),y1(y1),y2(y2),f(f){}
}ls[N<<1];
int T,n,cnt,tot;
dl y[N<<1],ans,x1,x2,y1,y2;
inline bool operator <(Line a,Line b)
{
return a.x<b.x;
}
#define lson (o<<1)
#define rson (o<<1|1)
inline void push_up(int o,int l,int r)
{
if(tr[o].c>0)
tr[o].s=tr[o].r-tr[o].l;
else if(l+1==r)
tr[o].s=0;
else
tr[o].s=tr[lson].s+tr[rson].s;
}
inline void build(int o,int l,int r)
{
tr[o].l=y[l];tr[o].r=y[r];
if(l+1==r)return;
int mid=(l+r)>>1;
build(lson,l,mid);build(rson,mid,r);
}
inline void modify(int o,int l,int r,Line e)
{
if(tr[o].l==e.y1&&tr[o].r==e.y2)
{
tr[o].c+=e.f;
push_up(o,l,r);return;
}int mid=(l+r)>>1;
if(e.y2<=tr[lson].r)modify(lson,l,mid,e);
else if(e.y1>=tr[rson].l)modify(rson,mid,r,e);
else
{
modify(lson,l,mid,Line(e.x,e.y1,tr[lson].r,e.f));
modify(rson,mid,r,Line(e.x,tr[rson].l,e.y2,e.f));
}
push_up(o,l,r);
}
int main()
{
while(scanf("%d",&n)&&n)
{
rep(i,n)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
y[++cnt]=y1;y[++cnt]=y2;
ls[++tot]=Line(x1,y1,y2,1);ls[++tot]=Line(x2,y1,y2,-1);
}
sort(y+1,y+cnt+1);sort(ls+1,ls+tot+1);
build(1,1,cnt);modify(1,1,cnt,ls[1]);
REP(i,2,tot)
{
ans+=(ls[i].x-ls[i-1].x)*tr[1].s;
modify(1,1,cnt,ls[i]);
}
printf("Test case #%d\n",++T);
printf("Total explored area: %.2lf\n\n",ans);
ans=tot=cnt=0;
}
return 0;
}
[日常摸鱼]poj1151Atlantis-扫描线的更多相关文章
- Hash 日常摸鱼笔记
本篇文章是Hash在信息学竞赛中的应用的学习笔记,分多次更新(已经有很多坑了) 一维递推 首先是Rabin-Karp,对于一个长度为\(m\)的串\(S\) \(f(S)=\sum_{i=1}^{m} ...
- [日常摸鱼]HDU1724 Ellipse-自适应Simpson法
模板题~ QAQ话说Simpson法的原理我还是不太懂-如果有懂的dalao麻烦告诉我~ 题意:每次给一个椭圆的标准方程,求夹在直线$x=l$和$x=r$之间的面积 Simpson法 (好像有时候也被 ...
- [日常摸鱼]bzoj1257余数之和
题意:输入$k,n$,求$\sum_{i=1}^n k \mod i$ $k \mod i=k-i*\lfloor \frac{k}{i} \rfloor $,$n$个$k$直接求和,后面那个东西像比 ...
- [日常摸鱼]bzoj1001狼抓兔子-最大流最小割
题意就是求最小割- 然后我们有这么一个定理(最大流-最小割定理 ): 任何一个网络图的最小割中边的容量之和等于图的最大流. (下面直接简称为最大流和最小割) 证明: 如果最大流>最小割,那把这些 ...
- [日常摸鱼]pojKaka's Matrix Travels-拆点+最大费最大流
方格取数的升级版,每个格子最多取一次. $k=1$的话就是个普及组的dp题,$k=2$就是在之前的基础上多加两维. 然而现在$k$太大了当然就不dp啦 对于$k=1$的情况我们还可以把$(i,j)$向 ...
- [日常摸鱼]loj6000「网络流 24 题」搭配飞行员
题面 应该是二分图匹配,不过我写的是网络最大流. dinic求二分图最大匹配:加个源点和汇点,源点连向二分图的一边所有点,二分图的另一边所有点连向汇点,很明显这样得到的最大流就是这个二分图的最大匹配. ...
- [日常摸鱼]poj1741Tree-点分治
还有两天就要去FJWC啦- 题意:一颗无根树,$k$为给定常数,求树上距离不超过$k$的点对的数量,多组数据,$n \leq 10^4$. 应该是点分治经典题~ 一般对于无根树我们都可以把它转变成有根 ...
- [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀
题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...
- [日常摸鱼]bzoj2724蒲公英-分块
区间众数经典题~ http://begin.lydsy.com/JudgeOnline/problem.php?id=4839这里可以提交~ 题意大概就是没有修改的询问区间众数,如果有一样的输出最小的 ...
- [日常摸鱼]poj1509Glass Beads-SAM
QAQ学了好几天了-(我太傻啦) #include<cstdio> #include<cstring> #define rep(i,n) for(register int i= ...
随机推荐
- 面试官:小伙子,你给我说一下你对MySQL索引的理解吧
一.索引是什么? 索引是帮助MySQL高效获取数据的数据结构. 二.索引能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引能够轻易将查询性能提高好几个数量级,总 ...
- 使用Mac清理工具CleanMyMac对Mac电脑进行维护
CleanMyMac是Mac系统下的一款苹果电脑清理软件,同时也是一款优秀的电脑维护软件,它能通过用户手动运行CleanMyMac内置脚本文件,释放电脑内存,帮助电脑缓解卡顿现象,保证电脑的良好持续运 ...
- 实用简易的U盘修复工具推荐
如果我们的U盘出现可以读取,但不能打开,或是提示格式化的情况,那可能是U盘硬件出现了问题.U盘内部部件损坏就只能维修了,如果是u盘出现逻辑错误,常用的解决方法就是到网上下载一个u盘修复工具,对u盘进行 ...
- python 如何跳过异常继续执行
使用try...except...语句,类似于if...else...,可以跳过异常继续执行程序,这是Python的优势 用法如下: 1 2 3 4 5 6 try: # 可能会 ...
- 简化的鸿蒙WiFi接口,仅需几行代码,简单易用!
使用鸿蒙原始WiFI API接口进行编程,整个过程稍显繁琐,为此我们对鸿蒙原始WiFi API接口做了一层封装,形成了一套更简单易用的接口. 简化后的API接口 STA模式 // 连接WiFi热点,并 ...
- IDEA创建web工程,不用Archetype(超简单)
Idea不用Archetype创建Web项目 以新建模块为例. 新建Maven项目 不勾选[Create from artchetype],直接Next pom中添加一句话: <artifact ...
- Beta冲刺随笔——测试
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...
- Beta——代码规范与计划
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范 此次代码规 ...
- Kubernetes 使用 Kubevirt 运行管理 Windows 10 操作系统
原文链接:https://fuckcloudnative.io/posts/use-kubevirt-to-manage-windows-on-kubernetes/ 最近我发现我的 Kubernet ...
- BugkuCTF-web-速度要快
打开题目显示一串文字,应该是提示. 查看源代码 OK ,now you have to post the margin what you find post提交参数margin burp发送后发现响应 ...