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】糖果雨的更多相关文章

  1. [bzoj1062] [NOI2008]糖果雨

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

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

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

  3. [NOI2008]糖果雨

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

  4. 1062: [NOI2008]糖果雨 - BZOJ

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1062 神题一个,直接讲思路了(全都是看别人的) 首先我们把一个云用一个平面上的点( ...

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

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

  6. BZOJ 1062 糖果雨

    http://www.lydsy.com/JudgeOnline/problem.php?id=1062 思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. bzoj 1061~1065【Noi2008】解题报告

    这次Noi好像格外喜欢树形DpQAQ P.S.好像这次的题都与图有关QAQ bzoj1061[Noi2008]志愿者招募:上下界可行最小费用流 bzoj1062[Noi2008]糖果雨:数形结合&am ...

  9. 【FINAL】NOI

    我就是复习一下..根本就不是什么题解...谁也看不懂的... NOI2007 社交网络         最短路 货币兑换         斜率优化动态规划 项链工厂         线段树 生成树计数 ...

随机推荐

  1. 如何使用AEditor制作一个简单的H5交互页demo

    转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...

  2. POJ 1921 Paper Cut(计算几何の折纸问题)

    Description Still remember those games we played in our childhood? Folding and cutting paper must be ...

  3. coding.net 版本控制

    这是版本测试的所有内容,其中用到了  git 和coding的远程连接. 代码及版本控制 git地址:https://git.coding.net/tianjiping/11111.git

  4. Notes of the scrum meeting(12.10)

    meeting time:20:00~20:30p.m.,December 10th,2013 meeting place:20号公寓前 attendees: 顾育豪                  ...

  5. c# throw抛出上一个异常

    catch(exception e) { throw; } 不仅抛出这次的异常,也抛出之前的异常. 用法示例:函数A调用函数B,A用到此throw时,B中发生的异常也会继承过来. catch(exce ...

  6. 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下有可能系统为安全,会自动取消 ...

  7. 【week6】psp

    本周psp

  8. HDU 2114 Calculate S(n)

    http://acm.hdu.edu.cn/showproblem.php?pid=2114 Problem Description Calculate S(n). S(n)=13+23 +33 +. ...

  9. 原生javascript自定义input[type=checkbox]效果

    2018年6月27日  更新 能用css3,就不用js 用纯css3实现样式重写 <!DOCTYPE html> <html lang="en"> < ...

  10. 【TCP】- TCP协议简介

    转载:https://blog.csdn.net/ningdaxing1994/article/details/73076795 TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议 ...