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

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

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

  2. [NOI2008]糖果雨

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

  3. [bzoj1062] [NOI2008]糖果雨

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

  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 2330 糖果

    Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...

  7. [BZOJ]1045 糖果传递(HAOI2008)

    放一道数学题. Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=1000000,表示 ...

  8. BZOJ 2330 糖果 差分约束求最小值

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2330 题目大意: 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果 ...

  9. BZOJ 1045 糖果传递(思维)

    设第i个人给了第i+1个人mi个糖果(可以为负),因为最后每个人的糖果都会变成sum/n. 可以得到方程组 mi-mi+1=a[i+1]-sum/n.(1<=i<=n). 把方程组化为mn ...

随机推荐

  1. JVM性能调优博客

    http://houjixin.blog.163.com/blog/static/35628410201411275719843/ http://blog.csdn.net/lastsweetop/a ...

  2. Android_Studio 及SDK下载

    Android Studio includes all the tools you need to build apps for Android. DOWNLOAD ANDROID STUDIO 2. ...

  3. 详解JavaScript中的Object对象

    Object是在javascript中一个被我们经常使用的类型,而且JS中的所有对象都是继承自Object对象的.虽说我们平时只是简单地使用了Object对象来存储数据,并没有使用到太多其他功能,但是 ...

  4. 恢复Linux下被误删除的文件(笔记)

    恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [root ...

  5. 一个简单的面试题 很多人也会懵 i++ 和++i的区别

    以下分别输出i的值分别为多少 NSInteger i = 0 ; NSLog(@"%ld",i++); NSLog(@"%ld",i++); NSLog(@&q ...

  6. 基础总结篇之九:Intent应用详解

    看似尋常最奇崛,成如容易卻艱辛.北宋.王安石 看似普通的事情其实最不同寻常,并不是简简单单就可以做好的:成功看起来似乎很容易,而成功的过程却充满着艰辛. 对于我们认为很普通的事情,不屑一顾,就永远不会 ...

  7. Hibernate(二)——POJO对象的操作

    POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作.  一,Hibernate框架中主键的生成策略有三种方式: 1,数 ...

  8. [置顶] Java中发邮件的6种方法

    1.官方标准JavaMail Sun(Oracle)官方标准,功能强大,用起来比较繁琐. 官方资料:http://www.oracle.com/technetwork/java/javamail/in ...

  9. [HeadFirst-HTMLCSS入门][第十章div,span]

    新元素 <div>逻辑容器 能进行分组,等于用一个大的盒子进行包装 <span> 内联字符的逻辑分组 text-align 改变所有内联元素位置. 属性 center 居中 行 ...

  10. attr()和prop()的区别

    引用以为一位大神的文章: http://www.365mini.com/page/jquery-prop.htm http://www.365mini.com/page/jquery-attr-vs- ...