题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1062

神题一个,直接讲思路了(全都是看别人的)

首先我们把一个云用一个平面上的点(t,length)表示,t表示云的左端到0时的时间,因为运动周期为len*2,所以mod len*2

然后我们要做的就是回答询问(t,l,r)

对于时间>t的点,时间不超过t+r,因为超过t+r,云的左端点就到了r的右边,然后length要在(l-(时间-t),r-(时间-t))之间
对于时间<t的点,时间不小于t-r,因为小于t-r,云的左端点就到了r的右边,然后length要在(l-(t-时间),r-(t-时间))之间

我们要求的答案就是在这两个平行四边形的内部的点的个数,用两个树状数组维护平行四边形内部点的个数(一个左偏45度,一个右偏45度)

实际情况要求4个平行四边形,因为有可能t+r或t-r越界

 1 const
 2         maxl=1010;
 3         maxn=1000010;
 4 type
 5         arr=array[0..maxl*2,0..maxl*4]of longint;
 6 var
 7         a,b:arr;
 8         t,l:array[0..maxn]of longint;
 9         n,len:longint;
10
11 procedure add(var a:arr;x,y,z:longint);
12 var
13         i:longint;
14 begin
15         inc(x);
16         inc(y);
17         if (x<=0) or (y<=0) then exit;
18         while x<=len*2+1 do
19           begin
20             i:=y;
21             while i<=len*4+1 do
22               begin
23                 inc(a[x,i],z);
24                 i:=i+(i and(-i));
25               end;
26             x:=x+(x and(-x));
27           end;
28 end;
29
30 function sum(var a:arr;x,y:longint):longint;
31 var
32         i:longint;
33 begin
34         inc(x);
35         inc(y);
36         sum:=0;
37         if x>len*2 then x:=len*2+1;
38         if y>len*4 then y:=len*4+1;
39         sum:=0;
40         while x>0 do
41           begin
42             i:=y;
43             while i>0 do
44               begin
45                 inc(sum,a[x,i]);
46                 i:=i-(i and(-i));
47               end;
48             x:=x-(x and (-x));
49           end;
50 end;
51
52 procedure add(x,y,z:longint);
53 begin
54         add(a,x,y+x,z);
55         add(b,x,y-x+len*2,z);
56 end;
57
58 function area(var a:arr;x1,y1,x2,y2:longint):longint;
59 begin
60         exit(sum(a,x2,y2)+sum(a,x1-1,y1-1)-sum(a,x1-1,y2)-sum(a,x2,y1-1));
61 end;
62
63 procedure main;
64 var
65         i,k,tt,cc,ll,rr,dd,s,ans:longint;
66 begin
67         read(n,len);
68         for i:=1 to n do
69           begin
70             read(k);
71             case k of
72               1:begin
73                 read(tt,cc,ll,rr,dd);
74                 t[cc]:=(tt-dd*ll+len*2)mod (len*2);
75                 l[cc]:=rr-ll;
76                 add(t[cc],l[cc],1);
77               end;
78               2:begin
79                 read(tt,ll,rr);
80                 tt:=tt mod (len*2);
81                 s:=longint(rr=len);
82                 ans:=area(a,tt,ll+tt,rr+tt,len*4)
83                 +area(a,0,ll+tt-len*2,rr+tt-len*2-s,len*4)
84                 +area(b,tt-rr+len*2+s,ll-tt,len*2,len*4)
85                 +area(b,tt-rr,ll-tt+len*2,tt-1,len*4);
86                 writeln(ans);
87               end;
88               3:begin
89                 read(tt,cc);
90                 add(t[cc],l[cc],-1);
91               end;
92             end;
93           end;
94 end;
95
96 begin
97         main;
98 end.

View Code

转载于:https://www.cnblogs.com/Randolph87/p/3674812.html

1062: [NOI2008]糖果雨 - BZOJ相关推荐

  1. 【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**

    1062: [NOI2008]糖果雨 Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成 的.更加神奇的是 ...

  2. bzoj 1062: [NOI2008]糖果雨

    高手 /**************************************************************Problem: 1062User: lxy8584099Langu ...

  3. BZOJ 1062: [NOI2008]糖果雨(二维树状数组)

    首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...

  4. [NOI2008]糖果雨

    bzoj1062[Noi2008]糖果雨 首先给出的颜色没有用. 估计要用数据结构.而线段难以维护. 考虑把线段变成点 T是单增的. 所以询问的时候,存在的线段都可能贡献答案. 那些线段的位置如果可以 ...

  5. bzoj1062: [NOI2008]糖果雨

    又是一道神题 题解传送门:http://blog.sina.com.cn/s/blog_86942b1401015yln.html 代码完全抄袭某神,请无视掉 const int N = 1010, ...

  6. [NOI2008]糖果雨——数形结合的思想

    题目描述: 维护一个线段集合支持以下操作: 1. add T L R D :在T秒时加入一条L至R的线段,运动方向为D(每秒向右移动D个单位),D为1或-1. 2. ask t L R: 询问t时刻有 ...

  7. 【BZOJ1062】[NOI2008]糖果雨【二维树状数组】

    [题目链接] 神题. [别人的题解] /* Pigonometry */ #include <cstdio> #include <algorithm>using namespa ...

  8. [NOI2008] 糖果雨

    神题啊!干了一年才AC 首先由于各个操作的时间严格上升,因此在某此操作中,还没被删除的云朵是可以是为永久存在的:这样,又由于云的运动速度大小相同,即周期都为2len,将云的左端点一个周期的往返运动画在 ...

  9. 【NOI2008】 糖果雨

    题目描述 糖果雨 [问题描述] 有一个美丽的童话:在天空的尽头有一个"糖果国",这里大到摩天大厦,小 到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖 果云, ...

最新文章

  1. html禁止手机文字放大,js实现移动端微信页面禁止字体放大
  2. Effective C# 原则18:实现标准的处理(Dispose)模式(译)
  3. OpenStack 虚拟机热迁移流程图
  4. 深入struts2(二) ---stuts2长处和主要包、类功能
  5. mysql使用命令访问数据库_mysql命令操作数据库
  6. 五笔输入法的前世今生
  7. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.9
  8. 编辑器——sublime
  9. python怎么判断实数_检查python对象是否可以解释为实数[python]
  10. 工具--国内最常用开源镜像站大汇总,解决你下载软件慢的问题
  11. 模拟豆机、高尔顿瓶【java】
  12. 【R语言】ggplot2作图补充(1)
  13. CAD软件中文本如何屏蔽
  14. 根据日期计算星期几 -- 基姆拉尔森计算公式
  15. ElementUI自定义主题报错“primordials is not defined”最佳解决方案
  16. 手机个人征信查询攻略
  17. 二级计算机重点,计算机二级的复习重点
  18. c语言编程节日祝福,2019程序员祝福语 程序员节祝福语
  19. 第4章 初识STM32—零死角玩转STM32-F429系列
  20. linux的rz很慢,Linux rz的使用

热门文章

  1. 18 | 需求管理:太多人给你安排任务,怎么办?
  2. (已解决)windows和linux系统中使用 pycharm 时设置打印字体颜色和背景色
  3. 数实融合激变时刻,与长期主义同行
  4. Jetson nano串口的使用——UART
  5. 虚拟贝司拓展音源-Toontrack Acoustic EBX
  6. dbf shp shx sbn sbx mdb adf等类型的文件的解释
  7. 专业查苹果测试软件,电池寿命检测软件苹果版-iphone查电池寿命appv2.1.5 iOS版-腾牛苹果网...
  8. linux查看redis链接数,查看redis连接数
  9. 《工程伦理与学术道德》第二章习题
  10. linux 下安装rar解压软件,centos下rar解压工具的安装 rar和unrar命令使用方法