http://www.lydsy.com/JudgeOnline/problem.php?id=1062
思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二维树状数组就行了、
注意可能因为取余的原因,把一个平行四边形拆成两半
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
int len2,len,len4,n;
int tr[][][];
int x[],y[];
int lowbit(int X){
return (X)&(-X);
}
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void add(int k,int x,int y,int c){
x++;y++;
for (int i=x;i<=len2;i+=lowbit(i))
for (int j=y;j<=len4;j+=lowbit(j))
tr[k][i][j]+=c;
}
int sum(int k,int x,int y){
if (x<||y<) return ;
x++;y++;
int ans=;
if (x>len2) x=len2+;
if (y>len4) y=len4+;
for (int i=x;i;i-=lowbit(i))
for (int j=y;j;j-=lowbit(j))
ans+=tr[k][i][j];
return ans;
}
int sum(int k,int x1,int y1,int x2,int y2){
return sum(k,x2,y2)+sum(k,x1-,y1-)-sum(k,x2,y1-)-sum(k,x1-,y2);
}
int main(){
n=read();len=read();len2=len<<;len4=len2<<;
while (n--){
int opt=read();
if (opt==){
int t=read(),c=read(),l=read(),r=read(),d=read();
x[c]=(t-d*l+len2)%len2;
y[c]=r-l;
add(,x[c],y[c]+x[c],);
add(,x[c],y[c]-x[c]+len2,);
}else
if (opt==)
{
int t=read(),l=read(),r=read();
t%=len2;
int k=(r==len);
int ans=sum(,t,l+t,r+t,len4)+sum(,,l+t-len2,r+t-len2-k,len4)
+sum(,t-r+len2+k,l-t,len2,len4)+sum(,t-r,l-t+len2,t-,len4);
printf("%d\n",ans);
}else{
int t=read(),c=read();
add(,x[c],y[c]+x[c],-);
add(,x[c],y[c]-x[c]+len2,-);
}
} }
BZOJ 1062 糖果雨的更多相关文章
-
【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**
1062: [NOI2008]糖果雨 Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是, ...
-
[NOI2008]糖果雨
bzoj1062[Noi2008]糖果雨 首先给出的颜色没有用. 估计要用数据结构.而线段难以维护. 考虑把线段变成点 T是单增的. 所以询问的时候,存在的线段都可能贡献答案. 那些线段的位置如果可以 ...
-
[bzoj1062] [NOI2008]糖果雨
Description 有一个美丽的童话:在天空的尽头有一个" 糖果国" ,这里大到摩天大厦,小到小花小草都是用糖果建造而成的.更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果 ...
-
1062: [NOI2008]糖果雨 - BZOJ
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1062 神题一个,直接讲思路了(全都是看别人的) 首先我们把一个云用一个平面上的点( ...
-
BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...
-
BZOJ 2330 糖果
Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...
-
[BZOJ]1045 糖果传递(HAOI2008)
放一道数学题. Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=1000000,表示 ...
-
BZOJ 2330 糖果 差分约束求最小值
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2330 题目大意: 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果 ...
-
BZOJ 1045 糖果传递(思维)
设第i个人给了第i+1个人mi个糖果(可以为负),因为最后每个人的糖果都会变成sum/n. 可以得到方程组 mi-mi+1=a[i+1]-sum/n.(1<=i<=n). 把方程组化为mn ...
随机推荐
-
tinkphp登录验证码的使用
登录和验证(控制器) <?php namespace Come\Controller; use Think\Controller; class RenController extends Con ...
-
jquery左右链接类似frameset的插件
一般在使用jquery的扩展的 ui方面的插件, 都要注意链接两个文件 一个是ui 相关的js文件 另一个是 ui相关的 css文件! 参考这个css布局 通常多个平行的items 都是用ul li来 ...
-
Linux学习笔记(1)Linux虚拟机安装过程中的知识点及常用管理工具
1. VMware的相关知识 (1)建议的VMware的配置: CPU 主频1GHz以上 内存 1GB以上 硬盘 分区空闲空间8GB以上 (2)VMware创建快照 快照的作用是保存虚拟机的现有状态, ...
-
C#关于Sort排序问题
1.在集合中用Sort对集合元素进行排序 List<,,,,}; tmp.Sort((x, y) => -x.CompareTo(y)); Console.WriteLine(tmp); ...
-
C#入门经典(第五版)学习笔记(二)
---------------函数---------------参数数组:可指定一个特定的参数,必须是最后一个参数,可使用个数不定的参数调用函数,用params关键字定义它们 例如: static i ...
-
转:DSP学习经验
转载:http://www.cnblogs.com/MrYang/archive/2010/12/21/1913035.html
-
android开发1:安卓开发环境搭建(eclipse+jdk+sdk)
计划折腾折腾安卓开发了,从0开始的确很痛苦,不过相信上手应该也不会太慢.哈哈 一.Android简介 Android 是基于Linux内核的软件平台和操作系统. Android构架主要由3部分组成,l ...
-
C# 语言的多线程编程,完全是本科OS里的知识
基本知识,无参数Thread和带参数的Thread Thread类的参数就是参数指针,可以传入一个无参的函数. 如果要传入带参数的函数,先new一个ParameterizedThreadStart委托 ...
-
解决SQL Server 2008无法连接127.0.0.1的问题
电脑操作系统是Win10中文版,新装的英文版SQL Server 2008,纯默认安装,没有做任何改动. 装完SQL Server 2008之后,发现只能用默认的机器名来登录: 如果用127.0.0. ...
-
centos7 Ruby环境变量配置
ruby安装参考博客:https://blog.csdn.net/yelllowcong/article/details/78362370 (Redis之集群redis-trib.rb环境的搭建-y ...