这个问题很有趣的项目,写麻烦。它预计将有写了很长的时间。

好在,我想开了一个比较简单的方法。。

使用位计算,颜色RGB分别1,2,4,代表。

状态的长度了。

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<math.h>
  8. #include<map>
  9. #pragma comment(linker, "/STACK:1024000000,1024000000")
  10. using namespace std;
  11. #define maxn 11000
  12. #define mem(a,b) (memset(a),b,sizeof(a))
  13. #define lmin 1
  14. #define rmax len
  15. #define lson l,(l+r)/2,rt<<1
  16. #define rson (l+r)/2+1,r,rt<<1|1
  17. #define root lmin,rmax,1
  18. #define now l,r,rt
  19. #define int_now int l,int r,int rt
  20. #define INF 99999999
  21. #define LL __int64
  22. #define mod 10007
  23. #define eps 1e-6
  24. #define zero(x) (fabs(x)<eps?0:x)
  25. map<int,int>mp;
  26. int du[maxn*2];
  27. int len;
  28. struct list
  29. {
  30. int x;
  31. int y,yy;
  32. int cl;
  33. int leap;
  34. friend bool operator <(const list &a,const list &b)
  35. {
  36. return a.x<b.x;
  37. }
  38. }node[maxn*2];;
  39. int color[maxn*4*4][8];
  40. int yan[maxn*4*4][3];
  41. void creat()
  42. {
  43. memset(color,0,sizeof(color));
  44. memset(yan,0,sizeof(yan));
  45. }
  46. void push_up(int_now)
  47. {
  48. int tai=0;
  49. for(int i=0;i<=2;i++)
  50. if(yan[rt][i])tai=tai|(1<<i);
  51. for(int i=0;i<=7;i++)color[rt][i]=0;
  52. int all=du[r+1]-du[l];
  53. for(int i=1;i<=7;i++)
  54. {
  55. color[rt][i|tai]+=color[rt<<1][i]+color[rt<<1|1][i];
  56. }
  57. for(int i=1;i<=7;i++)all-=color[rt][i];
  58. color[rt][tai]+=all;
  59. }
  60. void updata(int ll,int rr,int cl,int x,int_now)
  61. {
  62. if(ll>r||rr<l)return;
  63. if(ll<=l&&rr>=r)
  64. {
  65. yan[rt][cl]+=x;
  66. push_up(now);
  67. return;
  68. }
  69. updata(ll,rr,cl,x,lson);
  70. updata(ll,rr,cl,x,rson);
  71. push_up(now);
  72. }
  73. int main()
  74. {
  75. int T,cas;
  76. scanf("%d",&T);
  77. cas=0;
  78. int n,x,y,xx,yy;
  79. char str[1110];
  80. while(T--)
  81. {
  82. cas++;
  83. scanf("%d",&n);
  84. int cl;
  85. int ls=0;
  86. du[0]=-1;
  87. for(int i=1;i<=n;i++)
  88. {
  89. scanf("%s%d%d%d%d",str,&x,&y,&xx,&yy);
  90. if(str[0]=='R')cl=0;
  91. if(str[0]=='G')cl=1;
  92. if(str[0]=='B')cl=2;
  93. node[i*2-1].cl=cl; node[i*2-1].y=y ; node[i*2-1].leap=1;
  94. node[i*2-1].x=x; node[i*2-1].yy=yy;
  95. node[i*2 ].cl=cl; node[i*2 ].y=y ; node[i*2 ].leap=-1;
  96. node[i*2 ].x=xx; node[i*2 ].yy=yy;
  97. du[++ls]=y;
  98. du[++ls]=yy;
  99. }
  100. sort(node+1,node+n*2+1);
  101. sort(du,du+ls+1);
  102. len=0;
  103. for(int i=1;i<=ls;i++)
  104. {
  105. if(du[i]!=du[i-1])
  106. {
  107. mp[du[i]]=++len;
  108. du[len]=du[i];
  109. }
  110. }
  111. len--;
  112. LL are[8];
  113. int st;
  114. st=0;
  115. creat();
  116. memset(are,0,sizeof(are));
  117. for(int i=1;i<=n*2;i++)
  118. {
  119. int l=mp[node[i].y];
  120. int r=mp[node[i].yy];
  121. for(int j=1;j<=7;j++)
  122. {
  123. are[j]+=(LL)color[1][j]*(node[i].x-st);
  124. }
  125. st=node[i].x;
  126. updata(l,r-1,node[i].cl,node[i].leap,root);
  127. }
  128. printf("Case %d:\n",cas);
  129. printf("%I64d\n",are[1]);
  130. printf("%I64d\n",are[2]);
  131. printf("%I64d\n",are[4]);
  132. printf("%I64d\n",are[3]);
  133. printf("%I64d\n",are[5]);
  134. printf("%I64d\n",are[6]);
  135. printf("%I64d\n",are[7]);
  136. }
  137. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

hdu-4419-Colourful Rectangle-段树区,并寻求的更多相关文章

  1. hdu 4419 Colourful Rectangle (离散化扫描线线段树)

    Problem - 4419 题意不难,红绿蓝三种颜色覆盖在平面上,不同颜色的区域相交会产生新的颜色,求每一种颜色的面积大小. 比较明显,这题要从矩形面积并的方向出发.如果做过矩形面积并的题,用线段树 ...

  2. HDU 4419 Colourful Rectangle --离散化+线段树扫描线

    题意: 有三种颜色的矩形n个,不同颜色的矩形重叠会生成不同的颜色,总共有R,G,B,RG,RB,GB,RGB 7种颜色,问7种颜色每种颜色的面积. 解法: 很容易想到线段树扫描线求矩形面积并,但是如何 ...

  3. HDU 4419 Colourful Rectangle(线段树+扫描线)

    题目链接 主要是pushup的代码,其他和区间更新+扫描线差不多. 那个区间如果要再刷一层x,那么sum[x][rt] = que[r+1] - que[l];但是如果原本有颜色为i,颜色将会变成i| ...

  4. [HDU 4419] Colourful Rectangle (扫描线 矩形面积并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题目大意:比矩形面积并多了颜色,问染成的每种颜色的面积. 矩形面积并的扫描线维护的是长度,这道题 ...

  5. hdu 4419 Colourful Rectangle

    http://acm.hdu.edu.cn/showproblem.php?pid=4419 题意:给出3种颜色,重叠会生成新的颜色,然后有一些矩形,求出每种颜色的面积. 转化为二进制表示颜色:001 ...

  6. HDU 6315.Naive Operations-线段树(两棵树合并)(区间单点更新、区间最值、区间求和)+思维 (2018 Multi-University Training Contest 2 1007)

    6315.Naive Operations 题意很好理解,但是因为区间求和求的是向下取整的a[i]/b[i],所以直接分数更新区间是不对的,所以反过来直接当a[i]==b[i]的时候,线段树对应的位置 ...

  7. hdu 1542 Atlantis 段树区,并寻求,,,尼玛真坑人数据,不要打开一小阵!

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. HDU ACM 4578 Transformation-&gt;段树-间隔的变化

    分析:复杂的经营分部树. 只有一个查询操作,这是要求[l,r]的数量之间p钍总和.并不是所有的查询所有节点,会议TLE.最好的是查询部件[a.b].所有这个区间值我们是平等的,即能返回(b-a+1)* ...

  9. hdu 4107当卡段树

    其核心思想是记录最大的节点值和最低值,假设max<p要么min>=p时间,在节点只变化add值,不要子树遍历:否则,就往子树递归. #include<iostream> #in ...

  10. HDU 1394 Minimum Inversion Number (数据结构-段树)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

随机推荐

  1. linux文件打开模式

     文件打开 int open(const char *pathname, int flags, mode_t mode); 普通方式(Canonical mode) flags中没有设置O_SYN ...

  2. 【C语言的日常实践(十四)】constkeyword详细解释

    const是C语言keyword,它定义一个变量不同意变更.使用const在一定程度上,可以提高节目的安全性和可靠性.其他.解const的作用,在看别人的代码时,对理解对方的程序有一定帮助. 1.co ...

  3. iOS 中client和server的 Web Service 网络通信 (2)

    在实际的应用开发过程中,同步请求的用户体验并非非常好:我们都知道.Apple是非常重视用户体验的.这一点也成为了行业的标杆,没实用户哪里来的好产品.所以用户体验是极其重要的.貌似废话有点多.接下来进入 ...

  4. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  5. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

  6. 学习pthreads,创建和终止多线程

    更CPU多线程编程,通过笔者的研究发现,,pthreads使用日趋广泛.它是螺纹POSIX标准,它定义了一组线程的创建和操作API. 配置环境见上博客文章.配置环境后,只需要加入#include &l ...

  7. 追索权 Eclipse + NDK error: stray &#39;\24&#39; in program

    [size=16px][b][color=#FF0000]追索权 Eclipse + NDK  error: stray '\24' in program[/color][b][/b][/b][/si ...

  8. 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能

    原文:[原创]构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)-托管资源优化-监测CLR性能 构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测C ...

  9. JVM内存结构、垃圾回收那点事(转)

    翻看电脑的文件夹,无意看到了9月份在公司做的一次分享,浏览了一下"婆婆特",发现自己在ppt上的写的引导性问题自己也不能确切的回答出来,哎,知识这东西,平时不常用的没些日子就生疏了 ...

  10. 为了解决这个问题:07文本WORD文档超链接、页码成{HYPERLINK&quot;网站&quot;}、{PAGE}/{NUMPAGES}

    版权声明:本文博主原创文章.博客,未经同意不得转载.