[NOI2008]糖果雨——数形结合的思想
题目描述:
维护一个线段集合支持以下操作:
1. add T L R D :在T秒时加入一条L至R的线段,运动方向为D(每秒向右移动D个单位),D为1或-1。
2. ask t L R: 询问t时刻有多少个线段与L~R这个区间相交。
3.del X: 删除某线段。
地图左界为0,右界为len。线段长度不超过len。
每一秒线段们都在运动(= =||好喜感),当一条线段左端点碰到地图左界或右界时运动方向会改变。
数据范围:操作数≤20w,len≤1000。
问题分析:
吐槽一下:noi2008好强啊~ 这神题完全不会 T_T, 果然我的思维能力太弱了……
不过,这类数形结合的题还是很少见的呢。
不难发现,线段的运动是以2*len为周期的。这样所有时间均能划到模意义下。
为了统一,不妨把每条线段都表示成(x,y)——在x秒诞生的长y的线段。这样,每条线段对与平面内一个点唯一对应~
现在考虑询问:简单起见,不妨令t=0,观察平面内满足L,R要求的区域。
(请原谅我的手残 >_<
这么考虑:
0s诞生的线段,长度至少要L才相交得到。
1s诞生的线段,考虑到这是模系(不然怎么会在1s后的未来诞生),比前者慢了1s,所以位置靠后1,相应长度要求只有L-1。
……
右半边是对称考虑的。实在想不清的话,画个图打点点就好了…… =w= ||
至于t>0的情况,考虑方法同上,只不过图形向右平移了t格。但右端溢出部分会出现在左边,为了方便,不妨把坐标系内信息复制一份接在右边。
至此,问题已经转化成了——平面内单点修改,区域求和。
因为是平行四边形所以有点麻烦,但可以维护两个扭曲的坐标系,使得这两个图形变成矩形。映射关系要想清楚。
最后变成矩形区域求和——二维树状数组就行了。
最后说下几个细节:
1.算左不算右,因为0s和2*len s是同一时间。
2.L=R=0时和R=len时注意特判。
巧妙利用数形结合建模的一道神题啊。 =。= ~
[NOI2008]糖果雨——数形结合的思想相关推荐
- 【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**
1062: [NOI2008]糖果雨 Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成 的.更加神奇的是 ...
- [NOI2008]糖果雨
bzoj1062[Noi2008]糖果雨 首先给出的颜色没有用. 估计要用数据结构.而线段难以维护. 考虑把线段变成点 T是单增的. 所以询问的时候,存在的线段都可能贡献答案. 那些线段的位置如果可以 ...
- 【BZOJ1062】[NOI2008]糖果雨【二维树状数组】
[题目链接] 神题. [别人的题解] /* Pigonometry */ #include <cstdio> #include <algorithm>using namespa ...
- [NOI2008] 糖果雨
神题啊!干了一年才AC 首先由于各个操作的时间严格上升,因此在某此操作中,还没被删除的云朵是可以是为永久存在的:这样,又由于云的运动速度大小相同,即周期都为2len,将云的左端点一个周期的往返运动画在 ...
- bzoj 1062: [NOI2008]糖果雨
高手 /**************************************************************Problem: 1062User: lxy8584099Langu ...
- 1062: [NOI2008]糖果雨 - BZOJ
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1062 神题一个,直接讲思路了(全都是看别人的) 首先我们把一个云用一个平面上的点( ...
- bzoj1062: [NOI2008]糖果雨
又是一道神题 题解传送门:http://blog.sina.com.cn/s/blog_86942b1401015yln.html 代码完全抄袭某神,请无视掉 const int N = 1010, ...
- BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...
- 【NOI2008】 糖果雨
题目描述 糖果雨 [问题描述] 有一个美丽的童话:在天空的尽头有一个"糖果国",这里大到摩天大厦,小 到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖 果云, ...
最新文章
- java 怎么让一个jlabel和一个jtextfield在一行_今天小哥大家分享一下Java编程语言的第一个程序应该怎么样去写...
- braintree php 开发,php – 如何为使用Braintree和静态方法调用的端点编写集成测试...
- java 监听 变量_[Java学习小记]使用PropertyChangeSupport来监听变量的变化
- 响应式框架Bootstrap栅格系统
- R语言编程基础(2)
- 再议Python协程——从yield到asyncio
- 软件工程项目需求分析
- Algorithm——何为算法?
- GIS产品开源大集合
- 【新品重磅发布】FOHEART·HF1面部表情捕捉头盔
- 默认关闭IDEA的注释doc的rendered view模式
- 112358序列c语言,112358(112358的规律是什么)
- 高能手办团服务器维护了,高能手办团11月27日更新了什么 11月27日更新维护详情...
- html语言div怎么使用,什么是div标签?HTML中div标签怎么使用?
- dof景深matlab,CG制作景深(DOF)的方法
- 什么是UI Path?
- 【附源码】计算机毕业设计java羽毛球场地管理系统设计与实现
- 一个基于GPRS模块及云后台的开源系统--Luat
- 如何通过TXT文件批量生成EAN14条码
- 计算机学习路线+必读书籍