1062: [NOI2008]糖果雨 - BZOJ
题目链接: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越界
const
maxl=;
maxn=;
type
arr=array[..maxl*,..maxl*]of longint;
var
a,b:arr;
t,l:array[..maxn]of longint;
n,len:longint; procedure add(var a:arr;x,y,z:longint);
var
i:longint;
begin
inc(x);
inc(y);
if (x<=) or (y<=) then exit;
while x<=len*+ do
begin
i:=y;
while i<=len*+ do
begin
inc(a[x,i],z);
i:=i+(i and(-i));
end;
x:=x+(x and(-x));
end;
end; function sum(var a:arr;x,y:longint):longint;
var
i:longint;
begin
inc(x);
inc(y);
sum:=;
if x>len* then x:=len*+;
if y>len* then y:=len*+;
sum:=;
while x> do
begin
i:=y;
while i> do
begin
inc(sum,a[x,i]);
i:=i-(i and(-i));
end;
x:=x-(x and (-x));
end;
end; procedure add(x,y,z:longint);
begin
add(a,x,y+x,z);
add(b,x,y-x+len*,z);
end; function area(var a:arr;x1,y1,x2,y2:longint):longint;
begin
exit(sum(a,x2,y2)+sum(a,x1-,y1-)-sum(a,x1-,y2)-sum(a,x2,y1-));
end; procedure main;
var
i,k,tt,cc,ll,rr,dd,s,ans:longint;
begin
read(n,len);
for i:= to n do
begin
read(k);
case k of
:begin
read(tt,cc,ll,rr,dd);
t[cc]:=(tt-dd*ll+len*)mod (len*);
l[cc]:=rr-ll;
add(t[cc],l[cc],);
end;
:begin
read(tt,ll,rr);
tt:=tt mod (len*);
s:=longint(rr=len);
ans:=area(a,tt,ll+tt,rr+tt,len*)
+area(a,,ll+tt-len*,rr+tt-len*-s,len*)
+area(b,tt-rr+len*+s,ll-tt,len*,len*)
+area(b,tt-rr,ll-tt+len*,tt-,len*);
writeln(ans);
end;
:begin
read(tt,cc);
add(t[cc],l[cc],-);
end;
end;
end;
end; begin
main;
end.
1062: [NOI2008]糖果雨 - BZOJ的更多相关文章
- 【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**
1062: [NOI2008]糖果雨 Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是, ...
- BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...
- [NOI2008]糖果雨
bzoj1062[Noi2008]糖果雨 首先给出的颜色没有用. 估计要用数据结构.而线段难以维护. 考虑把线段变成点 T是单增的. 所以询问的时候,存在的线段都可能贡献答案. 那些线段的位置如果可以 ...
- [bzoj1062] [NOI2008]糖果雨
Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果 ...
- BZOJ 1062 糖果雨
http://www.lydsy.com/JudgeOnline/problem.php?id=1062 思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二 ...
- bzoj1062【Noi2008】糖果雨
orz.....神tm数形结合题 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1062 插入线段,删除线段,查询区间内线段个数,线段随时间往复 ...
- 1045: [HAOI2008] 糖果传递 - BZOJ
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的 ...
- 1065: [NOI2008]奥运物流 - BZOJ
Sample Input4 1 0.52 3 1 310.0 10.0 10.0 10.0Sample Output30.00 推荐题解:http://blog.csdn.net/whjpji/art ...
- 1064: [Noi2008]假面舞会 - BZOJ
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
随机推荐
- Dynamic\Static\IsKinematic
1.Dynamic: 有Collider和RigidBody的GameObject, Unity视之为Dynamic. 适用于经常变换移动的对象. 2.Static: 只含有Collider的Game ...
- HttpClient(4.3.5) - HTTP Protocol Interceptors
The HTTP protocol interceptor is a routine that implements a specific aspect of the HTTP protocol. U ...
- ZooKeeper(3.4.5) - 原生 API 的简单示例
一.创建会话 1. 创建一个基本的ZooKeeper会话实例 package com.huey.dream.demo; import java.util.concurrent.CountDownLat ...
- 做一个聪明的.net程序员
最近看了传智播客(http://net.itcast.cn/)的.net培训视频,感受颇深,忍不住要把感受写下来跟网友分享一下. 我从接触.net到现在已经至少过去了三五个年头,用.net也已经做了若 ...
- AngularJS Tabular Data with Edit/Update/Delete
效果 首先,我们先建立一些数据,当然你可以从你任何地方读出你的数据 var app = angular.module('plunker', ['ui.bootstrap']); app.control ...
- 【Cocos2d入门教程六】Cocos2d-x事件篇之触摸
Cocos游戏当中产生一个事件时,可以有多个对象在监听该事件,所以有优先级(Priority).优先级越高(Priority值越小),事件响应越靠前. 关系图: 新 事件分发机制:在2.x 版本事件处 ...
- Android之所有权限
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" >& ...
- boost库区间range基本原理及使用实例
由 www.169it.com 搜集整理 区间的概念类似于STL中的容器概念.一个区间提供了可以访问半开放区间[first,one_past_last)中元素的迭代器,还提供了区间中的元素数量的信息. ...
- 基于MRG_MyISAM引擎的Mysql分表
正常情况下的分表,都是直接创建多个相同结构的表,比如table_1.table_2...最近碰到一个特殊需求,需要创建一个主表,所有分表的数据增删改查,全部自动实时更新到主表,这个时候可以使用MRG_ ...
- Linux的网卡由eth0变成了eth1,如何修复 (转载)
Linux的网卡由eth0变成了eth1,如何修复 使用wmware安装了linux,安装成功后,使用的网卡是eth0,没有eth1.但是用过一段时间后,不知道为什么eth0无法使用,系统却自动生 ...