线段树扫描线的模板题,一个月前写的发现忘了一些还是要看看以前的博客呀!

  1. /*
  2. 思路:数据小不用离散化处理,线段树叶子结点维护一个区间
  3. */
  4. #include<iostream>
  5. #include<cstring>
  6. #include<cstdio>
  7. #include<algorithm>
  8. using namespace std;
  9. #define maxn 20005
  10. struct Seg{
  11. int l,r,h,s;
  12. Seg(){}
  13. Seg(int a,int b,int c,int d):l(a),r(b),h(c),s(d){}
  14. bool operator<(const Seg & a)const {
  15. //if(h==a.h) return s>a.s;
  16. return h<a.h;
  17. }
  18. }ss[maxn];
  19. bool lbd[maxn<<],rbd[maxn<<];//被覆盖的区域是否和左右区间线重合
  20. int numseg[maxn<<],cnt[maxn<<],len[maxn<<];
  21. void pushup(int rt,int l,int r){
  22. if(cnt[rt]){
  23. lbd[rt]=rbd[rt]=;
  24. len[rt]=r-l;
  25. numseg[rt]=;
  26. }
  27. else if(l+==r)
  28. len[rt]=numseg[rt]=rbd[rt]=lbd[rt]=;
  29. else {
  30. lbd[rt]=lbd[rt<<];
  31. rbd[rt]=rbd[rt<<|];
  32. len[rt]=len[rt<<]+len[rt<<|];
  33. numseg[rt]=numseg[rt<<]+numseg[rt<<|];
  34. if(lbd[rt<<|] && rbd[rt<<]) numseg[rt]-=;
  35. }
  36. }
  37. #define lson l,m,rt<<1
  38. #define rson m,r,rt<<1|1
  39. void update(int L,int R,int c,int l,int r,int rt){
  40. if(L<=l && R>=r){
  41. cnt[rt]+=c;
  42. pushup(rt,l,r);
  43. return;
  44. }
  45. int m=l+r>>;
  46. if(L<m) update(L,R,c,lson);
  47. if(R>m) update(L,R,c,rson);
  48. pushup(rt,l,r);
  49. }
  50. void init(){
  51. memset(lbd,,sizeof lbd);
  52. memset(rbd,,sizeof rbd);
  53. memset(cnt,,sizeof cnt);
  54. memset(len,,sizeof len);
  55. memset(numseg,,sizeof numseg);
  56. }
  57. int main(){
  58. int n;
  59. while(scanf("%d",&n)==){
  60. init();
  61. int m=,x1,y1,x2,y2,lbd=,rbd=-,last=,ans=;
  62. for(int i=;i<=n;i++){
  63. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  64. ss[m++]=Seg(x1,x2,y1,);
  65. ss[m++]=Seg(x1,x2,y2,-);
  66. lbd=min(lbd,x1),rbd=max(rbd,x2);
  67. }
  68. sort(ss,ss+m);
  69. for(int i=;i<m;i++){
  70. update(ss[i].l,ss[i].r,ss[i].s,lbd,rbd,);
  71. ans+=abs(len[]-last);last=len[];
  72. ans+=numseg[]*(ss[i+].h-ss[i].h);
  73. }
  74. printf("%d\n",ans);
  75. }
  76. return ;
  77. }

poj1177 矩形周长并的更多相关文章

  1. 扫描线矩形周长的并 POJ1177

    //扫描线矩形周长的并 POJ1177 // 我是按x轴 #include <iostream> #include <cstdio> #include <cstdlib& ...

  2. 25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有

    package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect( ...

  3. HDU 1828 / POJ 1177 Picture --线段树求矩形周长并

    题意:给n个矩形,求矩形周长并 解法:跟求矩形面积并差不多,不过线段树节点记录的为: len: 此区间线段长度 cover: 此区间是否被整个覆盖 lmark,rmark: 此区间左右端点是否被覆盖 ...

  4. HDU 1828 扫描线(矩形周长并)

    Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  5. HDU 6362(求椭圆中矩形周长的期望 数学)

    题意是给定一个椭圆标准方程的a,b(椭圆的长半轴长和短半轴长),在[0,b]内取一个数,则过点(0,b)且平行于x轴的直线与椭圆交于两点,再将此两点关于x轴做对称点,顺次连接此四点构成矩形,求出这些矩 ...

  6. hdu 1828 Picture(线段树扫描线矩形周长并)

    线段树扫描线矩形周长并 #include <iostream> #include <cstdio> #include <algorithm> #include &l ...

  7. 51nod 1206 Picture 矩形周长求并 | 线段树 扫描线

    51nod 1206 Picture 矩形周长求并 | 线段树 扫描线 #include <cstdio> #include <cmath> #include <cstr ...

  8. P1856 [USACO5.5]矩形周长Picture

    P1856 [USACO5.5]矩形周长Picture $len$            $sum$              $num$             $flag\_l$ $flage\_ ...

  9. P1856 [USACO5.5]矩形周长Picture[扫描线]

    题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...

随机推荐

  1. prometheus + grafana部署RabbitMQ监控

    prometheus + grafana部署RabbitMQ监控 1.grafana导入dashboards https://grafana.com/dashboards/2121   2.expor ...

  2. make_blobs

    一.make_blobs简介 scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量.中心点数量.范围等来生成几类数据,这些数据 ...

  3. mysql表备份的一种方式

    前提: 最近测试环境shop表经常出现表损坏不能正常查询,通过mysql的修复方法,暂时有效.故做该表的迁移操作. 思路是: 停止数据库的操作 1.备份老表.  2.创建一个结构一样的表. 3.将老表 ...

  4. python番外篇--sql注入

    一.sql注入概念介绍 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)S ...

  5. JAVA通过继承线性表来实现有序表

    1,对于线性表而言,里面的元素是无序的,可以随意地将新元素增加到线性表中而不需要考虑该元素在线性表中的位置.但是,对于有序表而言,其中的元素是按照某种方式进行排序的,因此在有序表中插入元素时,需要按照 ...

  6. Spring第一个helloWorld

    Spring 简介: 轻量级:Spring是非侵入性的-基于Spring开发的应用中的对象可以不依赖于Spring的API 依赖注入(DI—dependdency injection.IOC) 面向切 ...

  7. js 运动框架及实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. nxlog 日志采集

    Nxlog 主要用于各业务后端服务的日志采集,windows环境和linux环境都支持. RPM 包:rpm -ivh http://nxlog.co/system/files/products/fi ...

  9. text-decoration和text-indent和text-shadow

    text-decoration 属性规定添加到文本的修饰,规定划线的位置. <html> <head> <style type="text/css"& ...

  10. Java EE之Hibernate异常总结【5】java.lang.StackOverflowError[栈溢出]

    Exception in thread "main" java.lang.StackOverflowError at java.lang.reflect.InvocationTar ...