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 ...
随机推荐
- 远程连接mysql速度慢的解决方法:skip-name-resolve取消DNS的反向解析
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的 MYSQL开启了DNS的反向解析,在MY.INI(WINDOW ...
- vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 "invalid signature"错误解决方案
项目背景 vue-cli生成的单页面项目,router使用history模式.产品会在公众号内使用,需要添加微信JSSDK,做分享相关配置. 遇到的问题 相关配置与JS接口安全域名都已经ok,发布后, ...
- (最新)各大公司Java后端开发面试题总结
ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一 ...
- C标准库中atoi的一种可能的实现
为避免与标准库中的atoi产生歧义, 我将自己编写的函数命名为strToInt, 以下是示例代码 #include <stdio.h> int strToInt(const char *s ...
- luogu2398 SUM GCD
题目大意:求sum i(1->n) (sum j(1->n) (gcd(i,j))). 对于每对(i,j)都来一次gcd很慢,但是我们知道,一个约数i在1~n范围内是n/i个数的约数.gc ...
- web中使用svg失量图形及ie8以下浏览器的处理方式
直接上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...
- Codeforces Round #106 (Div. 2) D. Coloring Brackets —— 区间DP
题目链接:https://vjudge.net/problem/CodeForces-149D D. Coloring Brackets time limit per test 2 seconds m ...
- YTU 2442: C++习题 矩阵求和--重载运算符
2442: C++习题 矩阵求和--重载运算符 时间限制: 1 Sec 内存限制: 128 MB 提交: 1457 解决: 565 题目描述 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运 ...
- ios蓝牙开发(四)BabyBluetooth蓝牙库介绍
BabyBluetooth 是一个最简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和mac osx. 特色: 基于原生CoreBluetooth框架封装的轻量级的开源库,可以帮你 ...
- poj 3468 A Simple Problem with Integers(线段树 插线问线)
#include<iostream> #include<stdio.h> #include<string.h> #define NN 2500000 using n ...