bzoj1062【Noi2008】糖果雨
orz.....神tm数形结合题
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1062

插入线段,删除线段,查询区间内线段个数,线段随时间往复运动
sol: 线段肯定没法操作,考虑把线段化成点
首先显然因为2*len是一个周期,所以t%=2*len
因为线段有一个初始位置l,考虑将线段移动至l=0的位置,用时间和长度表示该线段

插入一个点时,该点的坐标为((t-l*d)%len,r-l)
删除一个点时,直接删除即可
对于查询操作,t时刻与[l,r]有交的线段如下图

先画出t=0时的图像,左右沿x=len对称,再右移t个单位,超过右边界的补到左边
....这样奇怪的图形也没法处理QAQ不过可以将其补成平行四边形

还是比较难搞QAQ,然而可以通过扭曲坐标系将其化成矩形
<len的点横坐标仍为t,纵坐标为Pi+t
>len的点横坐标仍为t,纵坐标为Pi﹣t+2*len(为保证坐标非负)

唔....然后就是平面加点,删点,查询子矩阵和QwQ用二维树状数组维护即可
各种细节在代码里有注释
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int Mx=;
struct Node { int x,y1,y2; } str[Mx];
int q,len,k,t,map[][][];//因为有两种斜率,所以每个点需要记2次
inline int lowbit(int x) { return x&(-x); }
inline void add(int c,int det)//因为树状数组不能访问0下标,需要右移一位
{
for(int i=str[c].x+;i<;i+=lowbit(i))
{
for(int j=str[c].y1+;j<;j+=lowbit(j)) map[][i][j]+=det;
for(int j=str[c].y2+;j<;j+=lowbit(j)) map[][i][j]+=det;
}
}
inline int sum(int x,int y,int jud)
{
if(x<||y<) return ; x++;y++;//下标右移
if(x>*len) x=(*len)+;
if(y>*len) y=(*len)+;
int tmp=;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
tmp+=map[jud][i][j];
return tmp;
}
inline int area(int jud,int x1,int y1,int x2,int y2)
{
return sum(x2,y2,jud)+sum(x1-,y1-,jud)-sum(x1-,y2,jud)-sum(x2,y1-,jud);
//考虑下标超过2*len时要补到左边
}
inline int solve(int t,int l,int r)
{
int d=(r==len);//如果区间右端点为len则在直线y=len上的点只能被计算一次
return area(,t,l+t,t+r,*len)+area(,,l+t-*len,t+r-*len-d,*len)+
area(,*len-r+t+d,l-t,*len,*len)+area(,t-r,l-t+*len,t-,*len);
}
int main()
{
scanf("%d%d",&q,&len);
while(q--)
{
scanf("%d%d",&k,&t);
if(k==)
{
int l,r,c,d;scanf("%d%d%d%d",&c,&l,&r,&d);
str[c].x=(t+(*len)-(l*d))%(*len);//2*len为一个周期
str[c].y1=r-l+str[c].x;
str[c].y2=r-l-str[c].x+(*len);//为避免下标为负所以上移2*len个单位
add(c,);//加点视为单点+1
}
else if(k==)
{
int l,r;scanf("%d%d",&l,&r);
printf("%d\n",solve(t%(*len),l,r));
}
else
{
int c;scanf("%d",&c);
add(c,-);//删点视为单点-1
}
}
return ;
}
bzoj1062【Noi2008】糖果雨的更多相关文章
- [bzoj1062] [NOI2008]糖果雨
Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果 ...
- 【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**
1062: [NOI2008]糖果雨 Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是, ...
- [NOI2008]糖果雨
bzoj1062[Noi2008]糖果雨 首先给出的颜色没有用. 估计要用数据结构.而线段难以维护. 考虑把线段变成点 T是单增的. 所以询问的时候,存在的线段都可能贡献答案. 那些线段的位置如果可以 ...
- 1062: [NOI2008]糖果雨 - BZOJ
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1062 神题一个,直接讲思路了(全都是看别人的) 首先我们把一个云用一个平面上的点( ...
- BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...
- BZOJ 1062 糖果雨
http://www.lydsy.com/JudgeOnline/problem.php?id=1062 思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj 1061~1065【Noi2008】解题报告
这次Noi好像格外喜欢树形DpQAQ P.S.好像这次的题都与图有关QAQ bzoj1061[Noi2008]志愿者招募:上下界可行最小费用流 bzoj1062[Noi2008]糖果雨:数形结合&am ...
- 【FINAL】NOI
我就是复习一下..根本就不是什么题解...谁也看不懂的... NOI2007 社交网络 最短路 货币兑换 斜率优化动态规划 项链工厂 线段树 生成树计数 ...
随机推荐
- 如何使用AEditor制作一个简单的H5交互页demo
转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...
- POJ 1921 Paper Cut(计算几何の折纸问题)
Description Still remember those games we played in our childhood? Folding and cutting paper must be ...
- coding.net 版本控制
这是版本测试的所有内容,其中用到了 git 和coding的远程连接. 代码及版本控制 git地址:https://git.coding.net/tianjiping/11111.git
- Notes of the scrum meeting(12.10)
meeting time:20:00~20:30p.m.,December 10th,2013 meeting place:20号公寓前 attendees: 顾育豪 ...
- c# throw抛出上一个异常
catch(exception e) { throw; } 不仅抛出这次的异常,也抛出之前的异常. 用法示例:函数A调用函数B,A用到此throw时,B中发生的异常也会继承过来. catch(exce ...
- win7 x64+iis7.5 配置错误:CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\7cb4f3
解决方法: 1. 将windows/temp属性-安全-高级 添加IIS_USERS用户,同时编辑权限为完全控制(写入和编辑)即可. 注意: 要确保权限添加上了,win7下有可能系统为安全,会自动取消 ...
- 【week6】psp
本周psp
- HDU 2114 Calculate S(n)
http://acm.hdu.edu.cn/showproblem.php?pid=2114 Problem Description Calculate S(n). S(n)=13+23 +33 +. ...
- 原生javascript自定义input[type=checkbox]效果
2018年6月27日 更新 能用css3,就不用js 用纯css3实现样式重写 <!DOCTYPE html> <html lang="en"> < ...
- 【TCP】- TCP协议简介
转载:https://blog.csdn.net/ningdaxing1994/article/details/73076795 TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议 ...