BZOJ 1062 糖果雨
http://www.lydsy.com/JudgeOnline/problem.php?id=1062
思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二维树状数组就行了、
注意可能因为取余的原因,把一个平行四边形拆成两半
1 #include<algorithm> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<iostream> 6 int len2,len,len4,n; 7 int tr[2][2005][4005]; 8 int x[4000005],y[4000005]; 9 int lowbit(int X){ 10 return (X)&(-X); 11 } 12 int read(){ 13 int t=0,f=1;char ch=getchar(); 14 while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} 15 while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();} 16 return t*f; 17 } 18 void add(int k,int x,int y,int c){ 19 x++;y++; 20 for (int i=x;i<=len2;i+=lowbit(i)) 21 for (int j=y;j<=len4;j+=lowbit(j)) 22 tr[k][i][j]+=c; 23 } 24 int sum(int k,int x,int y){ 25 if (x<0||y<0) return 0; 26 x++;y++; 27 int ans=0; 28 if (x>len2) x=len2+1; 29 if (y>len4) y=len4+1; 30 for (int i=x;i;i-=lowbit(i)) 31 for (int j=y;j;j-=lowbit(j)) 32 ans+=tr[k][i][j]; 33 return ans; 34 } 35 int sum(int k,int x1,int y1,int x2,int y2){ 36 return sum(k,x2,y2)+sum(k,x1-1,y1-1)-sum(k,x2,y1-1)-sum(k,x1-1,y2); 37 } 38 int main(){ 39 n=read();len=read();len2=len<<1;len4=len2<<1; 40 while (n--){ 41 int opt=read(); 42 if (opt==1){ 43 int t=read(),c=read(),l=read(),r=read(),d=read(); 44 x[c]=(t-d*l+len2)%len2; 45 y[c]=r-l; 46 add(0,x[c],y[c]+x[c],1); 47 add(1,x[c],y[c]-x[c]+len2,1); 48 }else 49 if (opt==2) 50 { 51 int t=read(),l=read(),r=read(); 52 t%=len2; 53 int k=(r==len); 54 int ans=sum(0,t,l+t,r+t,len4)+sum(0,0,l+t-len2,r+t-len2-k,len4) 55 +sum(1,t-r+len2+k,l-t,len2,len4)+sum(1,t-r,l-t+len2,t-1,len4); 56 printf("%d\n",ans); 57 }else{ 58 int t=read(),c=read(); 59 add(0,x[c],y[c]+x[c],-1); 60 add(1,x[c],y[c]-x[c]+len2,-1); 61 } 62 } 63 64 }
转载于:https://www.cnblogs.com/qzqzgfy/p/5601555.html
BZOJ 1062 糖果雨相关推荐
- 【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**
1062: [NOI2008]糖果雨 Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成 的.更加神奇的是 ...
- 【BZOJ1062】糖果雨(NOI2008)-数形结合+二维树状数组
测试地址:糖果雨 做法:本题需要用到数形结合+二维树状数组. 这题看上去非常没有思路,因此我们来一步一步整理一下思路. 首先,我们要发现线段的颜色互不相同,并且移动的速度相等,这就说明它们的运动是周期 ...
- 【NOI2008】 糖果雨
题目描述 糖果雨 [问题描述] 有一个美丽的童话:在天空的尽头有一个"糖果国",这里大到摩天大厦,小 到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖 果云, ...
- [NOI2008]糖果雨
bzoj1062[Noi2008]糖果雨 首先给出的颜色没有用. 估计要用数据结构.而线段难以维护. 考虑把线段变成点 T是单增的. 所以询问的时候,存在的线段都可能贡献答案. 那些线段的位置如果可以 ...
- ★【树状数组】【NOI2008】糖果雨
[问题描述] 有一个美丽的童话:在天空的尽头有一个"糖果国",这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果雨密密麻麻从天 ...
- 1062: [NOI2008]糖果雨 - BZOJ
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1062 神题一个,直接讲思路了(全都是看别人的) 首先我们把一个云用一个平面上的点( ...
- bzoj 1062: [NOI2008]糖果雨
高手 /**************************************************************Problem: 1062User: lxy8584099Langu ...
- BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...
- bzoj1062: [NOI2008]糖果雨
又是一道神题 题解传送门:http://blog.sina.com.cn/s/blog_86942b1401015yln.html 代码完全抄袭某神,请无视掉 const int N = 1010, ...
最新文章
- 用Microsoft DirectX光线跟踪改善渲染质量
- Python培训之就业面试题分享
- MySQL 5.6--------SSL连接最佳实战
- linux——管理系统设备之磁盘的加密、加密磁盘的挂载及磁盘阵列、配额
- drill apache_使用Apache Drill深入研究当今的大数据
- Unity-基本函数用法
- 面试问题:Spring实现AOP的方式
- 201612-2 工资计算
- eclipse Maven搭建SSH框架
- Linux下更换jdk和配置环境变量
- 360换机 v2.12.5.9 官方安卓版
- yosemite java 6_Mac OS X Yosemite 安装Java6
- python调用百度云文字识别
- hadoop进阶---hadoop性能优化(一)---hdfs空间不足的管理优化
- STM32---c语言指针1
- 百万级PV高可用网站架构设计
- 咩小饬的造轮子之路(彩票篇)
- 计算机组成原理4小时速成:五大组成部分:运算器,控制器,存储器,输入设备输出设备
- 智能机器人-(一)常用传感器及其原理
- 技术体系构建_构建出色的技术简历的简单指南
热门文章
- Java软件开发中,常用的工具有哪些?
- 开课吧Java课堂:多线程如何同步?消息如何传递?
- VLOOKUP函数返回查询值左侧的数据
- Java网络编程从入门到精通 (9):使用isXxx方法判断地址类型
- Docker入门命令:开发人员版
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value:
- Python基础学习2--字符串
- python3.x的改进
- Swift - 19 - 字典的初始化
- Part I 1.介绍Lustre文件系统