https://vjudge.net/problem/ZOJ-3540

错误记录:

扫描线没有考虑到同一行的要删除在前,加入在后;由于用了特殊的方式所以想当然以为不需要考虑这个问题

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. #include<set>
  6. using namespace std;
  7. #define fi first
  8. #define se second
  9. #define mp make_pair
  10. #define pb push_back
  11. typedef long long ll;
  12. typedef unsigned long long ull;
  13. typedef pair<int,int> pi;
  14. struct Q
  15. {
  16. ll x1,y1,x2,y2;
  17. }q[];
  18. ll w,h,n,m;
  19. struct Q2
  20. {
  21. ll x1,x2,y,type;
  22. }qt[];
  23. ll t1[];
  24. bool operator<(const Q2 &a,const Q2 &b)
  25. {
  26. return a.y<b.y||(a.y==b.y&&a.type<b.type);
  27. }
  28. ll qn,ta,ans;
  29. set<pi> s;
  30. set<pi>::iterator it;
  31. int main()
  32. {
  33. ll i,r,tx,ty;
  34. while(scanf("%lld%lld%lld%lld",&w,&h,&n,&m)==)
  35. {
  36. ans=;
  37.  
  38. for(i=;i<=n;i++) scanf("%lld%lld%lld%lld",&q[i].x1,&q[i].y1,&q[i].x2,&q[i].y2);
  39.  
  40. qn=;
  41. s.clear();s.insert(mp(-,));s.insert(mp(w+,w+));
  42. for(i=;i<=n;i++)
  43. {
  44. ++qn;qt[qn].x1=q[i].x1;qt[qn].x2=q[i].x2;qt[qn].y=q[i].y1;qt[qn].type=;
  45. ++qn;qt[qn].x1=q[i].x1;qt[qn].x2=q[i].x2;qt[qn].y=q[i].y2+;qt[qn].type=;
  46. }
  47. sort(qt+,qt+qn+);
  48. for(i=;i<=qn;i++) t1[i]=qt[i].y;
  49. t1[]=qn;
  50. t1[++t1[]]=;
  51. t1[++t1[]]=h+;
  52. sort(t1+,t1+t1[]+);t1[]=unique(t1+,t1+t1[]+)-t1-;
  53. r=;ta=max(w-m+,0ll);
  54. for(i=;i<t1[];i++)
  55. {
  56. while(r+<=qn&&qt[r+].y<=t1[i])
  57. {
  58. r++;
  59. if(qt[r].type==)
  60. {
  61. it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
  62. tx=it->first;ty=(--it)->second;
  63. ta-=max(tx-ty-m,0ll);
  64. ta+=max(qt[r].x1-ty-m,0ll);
  65. ta+=max(tx-qt[r].x2-m,0ll);
  66. s.insert(mp(qt[r].x1,qt[r].x2));
  67. }
  68. else
  69. {
  70. it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
  71. tx=(++it)->first;--it;ty=(--it)->second;
  72. ta-=max(qt[r].x1-ty-m,0ll);
  73. ta-=max(tx-qt[r].x2-m,0ll);
  74. ta+=max(tx-ty-m,0ll);
  75. s.erase(mp(qt[r].x1,qt[r].x2));
  76. }
  77. }
  78. ans+=ta*(t1[i+]-t1[i]);
  79. }
  80.  
  81. qn=;
  82. s.clear();s.insert(mp(-,));s.insert(mp(h+,h+));
  83. for(i=;i<=n;i++)
  84. {
  85. ++qn;qt[qn].x1=q[i].y1;qt[qn].x2=q[i].y2;qt[qn].y=q[i].x1;qt[qn].type=;
  86. ++qn;qt[qn].x1=q[i].y1;qt[qn].x2=q[i].y2;qt[qn].y=q[i].x2+;qt[qn].type=;
  87. }
  88. sort(qt+,qt+qn+);
  89. for(i=;i<=qn;i++) t1[i]=qt[i].y;
  90. t1[]=qn;
  91. t1[++t1[]]=;
  92. t1[++t1[]]=w+;
  93. sort(t1+,t1+t1[]+);t1[]=unique(t1+,t1+t1[]+)-t1-;
  94. r=;ta=max(h-m+,0ll);
  95. for(i=;i<t1[];i++)
  96. {
  97. while(r+<=qn&&qt[r+].y<=t1[i])
  98. {
  99. r++;
  100. if(qt[r].type==)
  101. {
  102. it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
  103. tx=it->first;ty=(--it)->second;
  104. ta-=max(tx-ty-m,0ll);
  105. ta+=max(qt[r].x1-ty-m,0ll);
  106. ta+=max(tx-qt[r].x2-m,0ll);
  107. s.insert(mp(qt[r].x1,qt[r].x2));
  108. }
  109. else
  110. {
  111. it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
  112. tx=(++it)->first;--it;ty=(--it)->second;
  113. ta-=max(qt[r].x1-ty-m,0ll);
  114. ta-=max(tx-qt[r].x2-m,0ll);
  115. ta+=max(tx-ty-m,0ll);
  116. s.erase(mp(qt[r].x1,qt[r].x2));
  117. }
  118. }
  119. ans+=ta*(t1[i+]-t1[i]);
  120. }
  121.  
  122. if(m==) ans/=;
  123. printf("%lld\n",ans);
  124. }
  125. return ;
  126. }

Adding New Machine ZOJ - 3540的更多相关文章

  1. HDU 4052 Adding New Machine(矩形面积并)

    Adding New Machine Problem Description Incredible Crazily Progressing Company (ICPC) suffered a lot ...

  2. UVA1492 - Adding New Machine(扫描线)

    UVA1492 - Adding New Machine(扫描线) option=com_onlinejudge&Itemid=8&page=show_problem&cate ...

  3. HDU 4052 Adding New Machine (线段树+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4052 初始给你w*h的矩阵,给你n个矩形(互不相交),按这些矩形尺寸把初始的矩形扣掉,形成一个新的'矩 ...

  4. 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)

    转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...

  5. .Uva&LA部分题目代码

    1.LA 5694 Adding New Machine 关键词:数据结构,线段树,扫描线(FIFO) #include <algorithm> #include <cstdio&g ...

  6. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. 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 ...

  8. HZNU Training 4 for Zhejiang Provincial Collegiate Programming Contest 2019

    今日这场比赛我们准备的题比较全面,二分+数论+最短路+计算几何+dp+思维+签到题等.有较难的防AK题,也有简单的签到题.为大家准备了一份题解和AC代码. A - Meeting with Alien ...

  9. zoj 3805 Machine

    Machine Time Limit: 2 Seconds      Memory Limit: 65536 KB In a typical assembly line, machines are c ...

随机推荐

  1. Jquery-easyui的默认图标的使用,以及如何添加自己想要的图标

    easyui的默认图标有以下这些: .icon-blank{ background:url('icons/blank.gif') no-repeat; } .icon-add{ background: ...

  2. H5新增表单属性

    一.form属性 <form id="test"> <input type="text" placeholder="请输入合适的信息 ...

  3. 小程序登录方式切换 不做url跳转

    var filegUP = require('../../utils/getUserPassword.js'); var filemd5 = require('../../utils/md5.min. ...

  4. STM32的低功耗设置

    因为产品需求,系统功耗是一个很重要的考虑方面.好好看下STM32F103的低功耗问题,以便编写驱动. 1.STM32的电源 1.1 STM32电源框图 上面的电源中需要注意的是后备供电区域,这个部分由 ...

  5. node安装与升级

    node安装与升级 1.安装 sudo apt-get install nodejs sudo apt-get install npm 2.升级 如果node不是最新的,node有一个模块叫n,是专门 ...

  6. JAVA MAIL基本功能

    1. [代码][Java]代码package emailrobot; import java.io.*;import java.text.*;import java.util.*;import jav ...

  7. lovelygallery_popup(卡哇依相册)

    /*************************** 相册 ***************************/LovelyGallery 功能特点:超过200个令人惊叹的3D&2D硬 ...

  8. Asp与Asp.Net

    1.Asp是什么? ASP是动态服务器页面(Active Server Page)的英文缩写.是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具 ...

  9. .NET 的 WebSocket 开发包比较 【已翻译100%】--网址:http://www.oschina.net/translate/websocket-libraries-comparison-2

    编者按 本文出现在第三方产品评论部分中.在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品.请会员报告任何垃圾信息或广告. Web项目常常需要将数据尽可能快地推送给客户 ...

  10. 【系列】 2-SAT

    bzoj 1997 Planar 题目大意: 给一个存在曼哈顿回路的无向图,求该图是否为平面图 思路: 先把曼哈顿回路提出来,则剩下的边的两个端点若有$ABAB$的形式则这两条边必定一个在环外一个在环 ...