Adding New Machine ZOJ - 3540
https://vjudge.net/problem/ZOJ-3540
错误记录:
扫描线没有考虑到同一行的要删除在前,加入在后;由于用了特殊的方式所以想当然以为不需要考虑这个问题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
struct Q
{
ll x1,y1,x2,y2;
}q[];
ll w,h,n,m;
struct Q2
{
ll x1,x2,y,type;
}qt[];
ll t1[];
bool operator<(const Q2 &a,const Q2 &b)
{
return a.y<b.y||(a.y==b.y&&a.type<b.type);
}
ll qn,ta,ans;
set<pi> s;
set<pi>::iterator it;
int main()
{
ll i,r,tx,ty;
while(scanf("%lld%lld%lld%lld",&w,&h,&n,&m)==)
{
ans=; for(i=;i<=n;i++) scanf("%lld%lld%lld%lld",&q[i].x1,&q[i].y1,&q[i].x2,&q[i].y2); qn=;
s.clear();s.insert(mp(-,));s.insert(mp(w+,w+));
for(i=;i<=n;i++)
{
++qn;qt[qn].x1=q[i].x1;qt[qn].x2=q[i].x2;qt[qn].y=q[i].y1;qt[qn].type=;
++qn;qt[qn].x1=q[i].x1;qt[qn].x2=q[i].x2;qt[qn].y=q[i].y2+;qt[qn].type=;
}
sort(qt+,qt+qn+);
for(i=;i<=qn;i++) t1[i]=qt[i].y;
t1[]=qn;
t1[++t1[]]=;
t1[++t1[]]=h+;
sort(t1+,t1+t1[]+);t1[]=unique(t1+,t1+t1[]+)-t1-;
r=;ta=max(w-m+,0ll);
for(i=;i<t1[];i++)
{
while(r+<=qn&&qt[r+].y<=t1[i])
{
r++;
if(qt[r].type==)
{
it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
tx=it->first;ty=(--it)->second;
ta-=max(tx-ty-m,0ll);
ta+=max(qt[r].x1-ty-m,0ll);
ta+=max(tx-qt[r].x2-m,0ll);
s.insert(mp(qt[r].x1,qt[r].x2));
}
else
{
it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
tx=(++it)->first;--it;ty=(--it)->second;
ta-=max(qt[r].x1-ty-m,0ll);
ta-=max(tx-qt[r].x2-m,0ll);
ta+=max(tx-ty-m,0ll);
s.erase(mp(qt[r].x1,qt[r].x2));
}
}
ans+=ta*(t1[i+]-t1[i]);
} qn=;
s.clear();s.insert(mp(-,));s.insert(mp(h+,h+));
for(i=;i<=n;i++)
{
++qn;qt[qn].x1=q[i].y1;qt[qn].x2=q[i].y2;qt[qn].y=q[i].x1;qt[qn].type=;
++qn;qt[qn].x1=q[i].y1;qt[qn].x2=q[i].y2;qt[qn].y=q[i].x2+;qt[qn].type=;
}
sort(qt+,qt+qn+);
for(i=;i<=qn;i++) t1[i]=qt[i].y;
t1[]=qn;
t1[++t1[]]=;
t1[++t1[]]=w+;
sort(t1+,t1+t1[]+);t1[]=unique(t1+,t1+t1[]+)-t1-;
r=;ta=max(h-m+,0ll);
for(i=;i<t1[];i++)
{
while(r+<=qn&&qt[r+].y<=t1[i])
{
r++;
if(qt[r].type==)
{
it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
tx=it->first;ty=(--it)->second;
ta-=max(tx-ty-m,0ll);
ta+=max(qt[r].x1-ty-m,0ll);
ta+=max(tx-qt[r].x2-m,0ll);
s.insert(mp(qt[r].x1,qt[r].x2));
}
else
{
it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
tx=(++it)->first;--it;ty=(--it)->second;
ta-=max(qt[r].x1-ty-m,0ll);
ta-=max(tx-qt[r].x2-m,0ll);
ta+=max(tx-ty-m,0ll);
s.erase(mp(qt[r].x1,qt[r].x2));
}
}
ans+=ta*(t1[i+]-t1[i]);
} if(m==) ans/=;
printf("%lld\n",ans);
}
return ;
}
Adding New Machine ZOJ - 3540的更多相关文章
- HDU 4052 Adding New Machine(矩形面积并)
Adding New Machine Problem Description Incredible Crazily Progressing Company (ICPC) suffered a lot ...
- UVA1492 - Adding New Machine(扫描线)
UVA1492 - Adding New Machine(扫描线) option=com_onlinejudge&Itemid=8&page=show_problem&cate ...
- HDU 4052 Adding New Machine (线段树+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4052 初始给你w*h的矩阵,给你n个矩形(互不相交),按这些矩形尺寸把初始的矩形扣掉,形成一个新的'矩 ...
- 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)
转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...
- .Uva&LA部分题目代码
1.LA 5694 Adding New Machine 关键词:数据结构,线段树,扫描线(FIFO) #include <algorithm> #include <cstdio&g ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- QEMU, a Fast and Portable Dynamic Translator-Fabrice Bellard-翻译
Abstract We present the internals of QEMU, a fast machine emulator using an original portable dynami ...
- HZNU Training 4 for Zhejiang Provincial Collegiate Programming Contest 2019
今日这场比赛我们准备的题比较全面,二分+数论+最短路+计算几何+dp+思维+签到题等.有较难的防AK题,也有简单的签到题.为大家准备了一份题解和AC代码. A - Meeting with Alien ...
- zoj 3805 Machine
Machine Time Limit: 2 Seconds Memory Limit: 65536 KB In a typical assembly line, machines are c ...
随机推荐
- wxpython中控件对键盘输入无响应的可能原因
问题描述: 开发环境:Win7 32bit + Python2.7.6 + WxPython 3.0.1-b20140707 开发某初级CAD软件中,需要实现点击TreeCtrl控件的相应选择,实现G ...
- Boost下载安装编译配置使用指南(含Windows和Linux) .
理论上,本文适用于boost的各个版本,尤其是最新版本1.39.0:适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,gcc,C++ Builder等.先 ...
- DRF框架
1.RESTful规范 1.1 REST风格:表属性状态转移 1.1.1资源:在web中凡是有被引用的必要的都叫资源 1.1.2 URI:统一资源标识符 URI包含URL 1.1.3 URL:统 ...
- com.mongodb. org.mongodb.
- Axure Base 03
(三)Axure rp元件的触发事件 l OnClick(点击时): 鼠标点击事件,除了动态面板的所有的其他元件的点击时触发.比如点击按钮. l OnMouseEnter(鼠标移入时): 鼠标进入 ...
- extjs 4 checkboxgroup Panel的简单用法
Ext.require([ 'Ext.tree.*', 'Ext.data.*', 'Ext.window.MessageBox', 'Ext.tip.*' ]); Ext.onReady(funct ...
- java上传文件,提交表单必须要设置enctype="multipart/form-data"
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码.默认情况,这个编码格式是application/x-www-form-urlenc ...
- Linux内核日志开关
Linux内核日志开关 1.让pr_debug能输出 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -59,7 +59,7 ...
- bfs 邻接表
#include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int date; st ...
- 网络转载:局域网安全:解决ARP攻击的方法和原理
局域网安全:解决ARP攻击的方法和原理 IT世界网2006-01-26 10:17 [故障原因] 局域网内有人使用ARP欺骗的木马程序(比如:传奇盗号的软件,某些传奇外挂中也被恶意加载了此程序). ...