题目大意:在平面直角坐标系的第一象限中,给出n个矩形(可能重叠)。有m次询问,每次询问点(t,t)的左下方的正方形区域中矩形的总面积(重叠部分重叠几次就得统计几次)。

题目分析:线段树的叶子节点x维护的是点(x,x)左下方的正方形区域中矩形的总面积。每添加一个矩形,便做一次区间更新。

代码如下:

  1. # include<bits/stdc++.h>
  2. using namespace std;
  3. # define LL long long
  4. # define mid (l+(r-l)/2)
  5.  
  6. const int N=200000;
  7.  
  8. LL lazy[N*4+1];
  9. LL lazy_a0[N*4+1],lazy_d[N*4+1];
  10. LL lazy_a[N*4+1],lazy_b[N*4+1],lazy_c[N*4+1];
  11.  
  12. void read(int &x)
  13. {
  14. x=0;
  15. char c;
  16. while((c=getchar())&&(c<'0'||c>'9'));
  17. x=c-'0';
  18. while(c=getchar()){
  19. if(c<'0'||c>'9') break;
  20. x=x*10+c-'0';
  21. }
  22. }
  23.  
  24. void pushDown(int rt,int l,int r)
  25. {
  26. lazy[rt<<1]+=lazy[rt];
  27. lazy[rt<<1|1]+=lazy[rt];
  28. lazy[rt]=0;
  29.  
  30. lazy_a0[rt<<1]+=lazy_a0[rt];
  31. lazy_a0[rt<<1|1]+=lazy_a0[rt]+(LL)(mid-l+1)*lazy_d[rt];
  32. lazy_d[rt<<1]+=lazy_d[rt];
  33. lazy_d[rt<<1|1]+=lazy_d[rt];
  34. lazy_a0[rt]=lazy_d[rt]=0;
  35.  
  36. lazy_a[rt<<1]+=lazy_a[rt];
  37. lazy_a[rt<<1|1]+=lazy_a[rt];
  38. lazy_a[rt]=0;
  39.  
  40. lazy_b[rt<<1]+=lazy_b[rt];
  41. lazy_b[rt<<1|1]+=lazy_b[rt];
  42. lazy_b[rt]=0;
  43.  
  44. lazy_c[rt<<1]+=lazy_c[rt];
  45. lazy_c[rt<<1|1]+=lazy_c[rt];
  46. lazy_c[rt]=0;
  47. }
  48.  
  49. void build(int rt,int l,int r)
  50. {
  51. lazy[rt]=0;
  52. lazy_a0[rt]=lazy_d[rt]=0;
  53. lazy_a[rt]=lazy_b[rt]=lazy_c[rt]=0;
  54. if(l==r) return ;
  55. build(rt<<1,l,mid);
  56. build(rt<<1|1,mid+1,r);
  57. }
  58.  
  59. void update1(int rt,int l,int r,int L,int R,LL x)
  60. {
  61. if(L<=l&&r<=R){
  62. lazy[rt]+=x;
  63. }else{
  64. if(L<=mid) update1(rt<<1,l,mid,L,R,x);
  65. if(R>mid) update1(rt<<1|1,mid+1,r,L,R,x);
  66. }
  67. }
  68.  
  69. void update2(int rt,int l,int r,int L,int R,LL a0,int d)
  70. {
  71. if(L<=l&&r<=R){
  72. LL a1=(LL)a0+(LL)d*(LL)(l-L);
  73. lazy_a0[rt]+=(LL)a1;
  74. lazy_d[rt]+=(LL)d;
  75. }else{
  76. if(L<=mid) update2(rt<<1,l,mid,L,R,a0,d);
  77. if(R>mid) update2(rt<<1|1,mid+1,r,L,R,a0,d);
  78. }
  79. }
  80.  
  81. void update3(int rt,int l,int r,int L,int R,int lowx,int lowy)
  82. {
  83. if(L<=l&&r<=R){
  84. ++lazy_a[rt];
  85. lazy_b[rt]-=(LL)(lowx+lowy);
  86. lazy_c[rt]+=(LL)lowx*(LL)lowy;
  87. }else{
  88. if(L<=mid) update3(rt<<1,l,mid,L,R,lowx,lowy);
  89. if(R>mid) update3(rt<<1|1,mid+1,r,L,R,lowx,lowy);
  90. }
  91. }
  92.  
  93. LL query(int rt,int l,int r,int x)
  94. {
  95. if(l==r){
  96. LL ans=0;
  97. ans+=lazy[rt];
  98. LL last=lazy_a0[rt]+(r-l)*lazy_d[rt];
  99. ans+=(r-l+1)*(lazy_a0[rt]+last)/2;
  100. ans+=lazy_a[rt]*l*l+lazy_b[rt]*l+lazy_c[rt];
  101. return ans;
  102. }else{
  103. pushDown(rt,l,r);
  104. if(x<=mid) return query(rt<<1,l,mid,x);
  105. return query(rt<<1|1,mid+1,r,x);
  106. }
  107. }
  108.  
  109. int main()
  110. {
  111. int T,n;
  112. read(T);
  113. while(T--)
  114. {
  115. build(1,0,N);
  116. scanf("%d",&n);
  117. int x1,x2,y1,y2;
  118. while(n--){
  119. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  120. int dltx=x2-x1;
  121. int dlty=y2-y1;
  122. update1(1,0,N,max(x2,y2)+1,N,(LL)dltx*(LL)dlty);
  123. if(y1>=x2)
  124. update2(1,0,N,y1,y2,0,dltx);
  125. else if(y2<=x1)
  126. update2(1,0,N,x1,x2,0,dlty);
  127. else if(y2>x1&&y1<x2){
  128. if(y2<x2&&y1<=x1){
  129. update3(1,0,N,x1,y2-1,x1,y1);
  130. update2(1,0,N,y2,x2,(LL)dlty*(y2-x1),dlty);
  131. }else if(y2>=x2&&y1<=x1){
  132. update3(1,0,N,x1,x2-1,x1,y1);
  133. update2(1,0,N,x2,y2,(LL)dltx*(LL)(x2-y1),dltx);
  134. }else if(y2>=x2&&y1>x1){
  135. update3(1,0,N,y1,x2-1,x1,y1);
  136. update2(1,0,N,x2,y2,(LL)dltx*(x2-y1),dltx);
  137. }else if(y2<x2&&y1>x1){
  138. update3(1,0,N,y1,y2-1,x1,y1);
  139. update2(1,0,N,y2,x2,(LL)dlty*(LL)(y2-x1),dlty);
  140. }
  141. }
  142. }
  143. scanf("%d",&n);
  144. while(n--)
  145. {
  146. scanf("%d",&x1);
  147. printf("%lld\n",query(1,0,N,x1));
  148. }
  149. }
  150. return 0;
  151. }

  

HDU-4533 威威猫系列故事——晒被子(区间更新)的更多相关文章

  1. hdu4533 威威猫系列故事——晒被子

    Problem Description 因为马拉松初赛中吃鸡腿的题目让不少人抱憾而归,威威猫一直觉得愧对大家,这几天他悄悄搬到直角坐标系里去住了. 生活还要继续,太阳也照常升起,今天,威威猫在第一象限 ...

  2. HDU 4533 威威猫系列故事——晒被子

    题目链接 扫描线可做,然后当时比赛后问虎哥,他说可以标记,然后拖了很久,今天从早上折腾到晚上,终于把两种情况写出来,分析太弱.改天扫描线,再来一次. 被子如果被y = x 穿过,可以分成两部分,上和下 ...

  3. HDU 4540 威威猫系列故事——打地鼠

    威威猫系列故事--打地鼠 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Su ...

  4. hdu 4523 威威猫系列故事——过生日 小模拟

    威威猫系列故事——过生日 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  5. hdu 4540 威威猫系列故事——打地鼠 dp小水题

    威威猫系列故事——打地鼠 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  6. HDU 4540 威威猫系列故事——打地鼠 (状态压缩DP)

    威威猫系列故事——打地鼠 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  7. HDU--杭电--4504--威威猫系列故事——篮球梦--DP

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  8. HDUOJ----4504 威威猫系列故事——篮球梦

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  9. hdoj 4526 威威猫系列故事——拼车记

    威威猫系列故事——拼车记 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

随机推荐

  1. stm32 dac库函数解读

    1.简述: 12位数字输入,电压输出,DAC可以配置为8位或12位模式.有2个输出通道.在双DAC模式下,两个通道可以独立地工作. 特殊功能: 噪声波形生成,三角波形生成,外部触发转换,双DAC同时或 ...

  2. (转)深入理解javascript的function

    原文:http://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2179323.html javascript笔记:深入理解javascript的fu ...

  3. VS2010编译Qt5.4.0静态库

    http://www.kavenblog.com/?p=375 1.Qt的跨平台十分优秀,但是在Windows上是还是会有许多问题,其中之一就是动态链接库的问题,Qt程序的发布必须带一个体积不小的DL ...

  4. Reason we use Camel

    Camel is mainly for integration purpose, in our project we also use it inside the single component t ...

  5. linux 下安装rsync

    一.服务器端配置: 1.安装xinetd,并修改rsync相关配置 # yum -y install xinetd # vi /etc/xinetd.d/rsync 如下代码: service rsy ...

  6. JSTL&EL(程序员必看之一)

    EL表达式 可以在jsp页面中减少大量的Java代码.Expression Language,它是一种借鉴了javaScript和XPath的表达式语言. EL表达式定义了一系列的隐含对象和操作符,使 ...

  7. Java 集合深入理解(13):Stack 栈

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情不错,再来一篇 Stack ! 数据结构中的 栈 数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操 ...

  8. CodeForces 414D (贪心)

    problem Mashmokh and Water Tanks 题目大意 给你一棵树,k升水,p块钱,进行一次游戏. 在游戏进行前,可以在任意个节点上放置1升水(总数不超过k) 游戏进行若干轮,每轮 ...

  9. 解决:子元素设置margin-top,父元素也受影响的问题

    <!doctype html><html> <head> <meta charset="UTF-8"> <title>子 ...

  10. HDU 4576

    http://acm.hdu.edu.cn/showproblem.php?pid=4576 题意:给一个1-n的环,m次操作,每次操作顺时针或逆时针走w步,求最后落在[l,r]区间的概率 dp[i] ...