高手

/**************************************************************Problem: 1062User: lxy8584099Language: C++Result: AcceptedTime:4248 msMemory:71916 kb
****************************************************************//*所有的事件按照输入顺序依次发生搞了半天不需要可持续。。。 首先看题解对于每一个云 有(出现时间,范围,运动方向) 因为运动是往返的 存在周期性把往右移动的云看做+len位置后 向左移动 所以周期为 2*len 所以对于所有的 t和 t%(2*len) 效果是一样的 而且询问和add cut都是按时间来的 所以我们可以将一个云表示为 (云的左端运动到左边界的时间 ,云的长度)放进二位坐标系对于add可以得到一个新的云的坐标为 ( (Ti-Li*Di)%(2*len) ,Ri-Li )记录下改颜色对应的坐标 方便删除 放进二位的树状数组 对于cut时间都没作用 因为任何时候 云的颜色互异 直接在二维树状数组里删除对应颜色的坐标对于ask (t,l,r)因为云是往返运动 所以 (t,l,r)的覆盖面积是关于x=len对称的 先考虑x<=len的情况考虑重合 x较大的时候和其重合的概率较小 因为此时左端点就很大 可能经过一段时间后左端点任然在r的右边 就一定不会有重合因此 要满足 x-t<=r => x<=t+r 即左端点左移t和单位要在r的左边 同样的 x较小的时候重合概率也很小因为此时左端点碰到左边也右移 时间足够长就可能移到r的右边所以要满足 t-x<=r => x>=t-r 综上 t-r<=x<=t+r 左端点满足此条件是可能重合 如果该云长度过小也可能不重合 已经满足左端点<=r 如果右端点>=l 则一定有重合 而 该云从开始运动 t 的时间 距离左边界 |x-t|所以 length>=l-|x-t| 才能保右端点>=l  画出来的图像很奇葩 可以补全为一个平行四边形虽然面积变大了 但是点指挥出现在合法的面积内 不影响答案 对于存在( y=-x+k ) 的平行四边形 我们把坐标变为 (x,x+y)对于存在( y=x+k ) 的平行四边形 我们把坐标变为 (x,y-x+len*2) +是为了避免出现负数然后维护两种个扭曲的坐标系所以树状数组修改的时候要修改两种 Qwq 注意 树状数组没法保存下标为0的信息  下标都后移一位r==len 一条直线上的点会被重复计算 判重
*/
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
using namespace std;
const int N=2005,M=1000010;
int n,len,len2,len4; // 表示 2倍的len  4倍的len
int s[2][N][N<<1],x[M],y[M];
void add(int k,int a,int b,int c)
{a++;b++;for(int i=a;i<=len2;i+=lowbit(i))for(int j=b;j<=len4;j+=lowbit(j)) s[k][i][j]+=c;// 因为第二维有+len2 所以要循环到len4
}
int sum(int k,int a,int b)
{a++;b++; int res=0;if(a<=0||b<=0) return 0; // 判断合法  if(a>len2) a=len2;if(b>len4) b=len4; // 约数在点集范围内 for(int i=a;i;i-=lowbit(i))for(int j=b;j;j-=lowbit(j))res+=s[k][i][j];return res;
}
int calc(int k,int x1,int y1,int x2,int y2)
{return sum(k,x2,y2)-sum(k,x2,y1-1)-sum(k,x1-1,y2)+sum(k,x1-1,y1-1);
}
int main()
{scanf("%d%d",&n,&len);;len2=(len<<1);len4=(len2<<1);while(n--){int op,t,c,l,r,d;scanf("%d",&op);if(op==1){scanf("%d%d%d%d%d",&t,&c,&l,&r,&d);x[c]=((t-l*d)%len2+len2)%len2;y[c]=r-l;add(0,x[c],x[c]+y[c],1);add(1,x[c],-x[c]+y[c]+len2,1);}else if(op==2){scanf("%d%d%d",&t,&l,&r); t%=len2;int res=0,flag=(r==len); // 特殊情况 res+=calc(0,t,l+t,t+r,len4);res+=calc(0,0,l+t-len2,t+r-len2-flag,len4);res+=calc(1,t-r+len2+flag,l-t,len2,len4);res+=calc(1,t-r,l-t+len2,t-1,len4);printf("%d\n",res);}else{scanf("%d%d",&t,&c); // 时间递增 t没用。。。 add(0,x[c],x[c]+y[c],-1);add(1,x[c],-x[c]+y[c]+len2,-1);}}return 0;
}

转载于:https://www.cnblogs.com/lxy8584099/p/10310818.html

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

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

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

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

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

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

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

  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. storm_常用命令
  2. 将方法定义在prototype上的好处
  3. Apache 2,4版本 编译与安装 RedHat enterprises 6.2
  4. flash与IPhone
  5. Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
  6. 通过padding-bottom或者padding-top实现等比缩放响应式图片
  7. CodeForces - 91B Queue(单调队列+二分)
  8. 【转贴备忘】[教程]iPhone 實機開發 Part 1 - HelloWorld
  9. 6 9*9乘法口诀
  10. Mac 长截图/长截屏
  11. 【电路基础】第1章-电路的基本规律(1)
  12. excel合并两列内容_EXCEL数据合并、批量添加内容知识,高手嫌弃,新手太需要...
  13. 获取当前时间的前一天时间
  14. 【leetcode-652】寻找重复的子树
  15. 【2020新书推荐】程序员值得一读的机器学习新书
  16. [IOS][已越狱]配合网易云音乐,使用Bridge快速免iTunes导入音乐到“音乐”
  17. 【转载】浅谈蓝牙 Mesh 组网技术
  18. 基于appinventor与EasyDL物体检测API的物体检测app
  19. 构建index所需的参考基因组以及各种版本的注释文件
  20. DXP软件使用快捷键

热门文章

  1. 【开讲啦】20150814 余秋雨:寻找远方的自己
  2. 机器人会偷走你的饭碗吗——写作篇
  3. 重磅!上海出落户新政:双一流应届硕士可直接落户!
  4. 概率论 事件关系 古典概型与几何概型
  5. IOS双重认证增加手机号
  6. 【转载收藏】Unity预计算实时GI
  7. python静态函数
  8. IMU及磁力计AHRS系统控制(一):传感器物理实现原理
  9. 【12c】新特性:Oracle 12c In-Database Archiving 数据库内归档
  10. vue {{}}中小数保留几位小数的toFixed(小数位数)方法