BZOJ_3132_上帝造题的七分钟_树状数组

Description

“第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵。

第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作。

第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作。

第四分钟,彩虹喵说,要基于二叉树的数据结构,于是便有了数据范围。

第五分钟,和雪说,要有耐心,于是便有了时间限制。

第六分钟,吃钢琴男说,要省点事,于是便有了保证运算过程中及最终结果均不超过32位有符号整数类型的表示范围的限制。

第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。”

——《上帝造裸题的七分钟》

所以这个神圣的任务就交给你了。

Input

输入数据的第一行为X n m,代表矩阵大小为n×m。

从输入数据的第二行开始到文件尾的每一行会出现以下两种操作:

  L a b c d delta —— 代表将(a,b),(c,d)为顶点的矩形区域内的所有数字加上delta。

  k a b c d   —— 代表求(a,b),(c,d)为顶点的矩形区域内所有数字的和。

请注意,k为小写。

Output

针对每个k操作,在单独的一行输出答案。

Sample Input

X 4 4
L 1 1 3 3 2
L 2 2 4 4 1
k 2 2 3 3

Sample Output

12

HINT

对于100%的数据,1 ≤ n ≤ 2048, 1 ≤ m ≤ 2048, 1 ≤ abs(delta) ≤ 500,操作不超过200000个,保证运算过程中及最终结果均不超过32位带符号整数类型的表示范围。


二维树状数组区间修改...

先想想一维树状数组怎么实现区间修改。

差分,开两个树状数组A和B,1~x +v时A中x加上x*v,B中x加上x。

查询1~x时(A中1~x)+(B中x+1~n) *n。

那二维?

同理!开四个树状数组A,B,C,D。

修改(1,1)~(x,y)+v时

A中(x,y)+v*x*y

B中(x,y)+v*x

C中(x,y)+v*y

D中(x,y)+v

查询不写了,其实就是把行列看成点,和一维的差不多。

答案容斥一下,就做完了。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 2250
int c[N][N][4],n,m;
char opt[10];
void fix(int x,int y,int v,int f) {
int i,j;
if(!x||!y) return ;
for(i=x;i<=n;i+=i&(-i)) for(j=y;j<=m;j+=j&(-j)) c[i][j][f]+=v;
}
int inq(int x,int y,int f) {
int re=0,i,j;
for(i=x;i;i-=i&(-i)) for(j=y;j;j-=j&(-j)) re+=c[i][j][f];
return re;
}
void add(int x,int y,int v) {
fix(x,y,v*x*y,0);
fix(x,y,v*x,1);
fix(x,y,v*y,2);
fix(x,y,v,3);
}
int qsum(int x,int y) {
return inq(x,y,0)+
y*(inq(x,m,1)-inq(x,y,1))+
x*(inq(n,y,2)-inq(x,y,2))+
x*y*(inq(n,m,3)+inq(x,y,3)-inq(x,m,3)-inq(n,y,3));
}
int main() {
scanf("%s%d%d",opt,&n,&m);
int i,x2,y2,x3,y3,h;
while(scanf("%s%d%d%d%d",opt,&x2,&y2,&x3,&y3)!=EOF) {
if(opt[0]=='L') scanf("%d",&h),add(x2-1,y2-1,h),add(x2-1,y3,-h),add(x3,y2-1,-h),add(x3,y3,h);
else printf("%d\n",qsum(x2-1,y2-1)-qsum(x2-1,y3)-qsum(x3,y2-1)+qsum(x3,y3));
}
}

BZOJ_3132_上帝造题的七分钟_树状数组的更多相关文章

  1. CodeVS2492 上帝造题的七分钟2(树状数组+并查集)

    传送门 树状数组模板题.注意优化,假设某个数的值已经是1了的话.那么我们以后就不用对他进行操作了,这个能够用并查集实现. 这道题还有个坑的地方,给出查询区间端点的a,b,有可能a>b. #inc ...

  2. [BZOJ3038]上帝造题的七分钟2 树状数组+并查集

    考试的时候用了两个树状数组去优化,暴力修改,树状数组维护修改后区间差值还有最终求和,最后骗了40分.. 这道题有好多种做法,求和好说,最主要的是开方.这道题过的关键就是掌握一点:在数据范围内,最多开方 ...

  3. [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discu ...

  4. BZOJ 3038 上帝造题的七分钟2 树状数组+并查集

    题目大意:一个序列,有两种操作.1.将一段数中的每个数开根号.2.查询一段数的和. 思路:和3211是一个题,有兴趣的能够看看我的那篇博客. CODE: #include <cmath> ...

  5. [bzoj3038/3211]上帝造题的七分钟2/花神游历各国_线段树

    上帝造题的七分钟2 bzoj-3038 题目大意:给定一个序列,支持:区间开方:查询区间和. 注释:$1\le n\le 10^5$,$1\le val[i] \le 10^{12}$. 想法:这题还 ...

  6. 【BZOJ】3038: 上帝造题的七分钟2(线段树+暴力)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=3038 这题我就有得吐槽了,先是线段树更新写错,然后不知哪没pushup导致te,精度问题sq ...

  7. tyvj P1716 - 上帝造题的七分钟 二维树状数组区间查询及修改 二维线段树

    P1716 - 上帝造题的七分钟 From Riatre    Normal (OI)总时限:50s    内存限制:128MB    代码长度限制:64KB 背景 Background 裸体就意味着 ...

  8. 【树状数组】BZOJ3132 上帝造题的七分钟

    3132: 上帝造题的七分钟 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1004  Solved: 445[Submit][Status][Dis ...

  9. BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1469  Solved: 631[Submit][Status][Dis ...

随机推荐

  1. App 被拒 -- App Store Review Guidelines (2015)中英文对照

    Introduction(简介) We're pleased that you want to invest your talents and time to develop applications ...

  2. Java反射之修改常量值

    1. 通过反射修改常量的值 package com.blueStarWei.invoke; import java.lang.reflect.Field; public class ModifyFin ...

  3. 各种代码版本控制工具下使用http代理的方法

    原文:各种SCM工具下使用http代理下载源码:http://www.linuxeden.com/html/develop/20090723/66951.html SCM是软件配置管理的简称,常见的S ...

  4. 推荐两个国外公共CDN服务

    最近这个国家信息安全问题舆论形势又见紧张,Google的访问又被强力堵截,谷歌的公共CDN也顺带被波及,像AngularJS这样的前卫js库,国内几大公共CDN服务都不提供支持.国外目前两大第三方公共 ...

  5. Java并发-取消与关闭

    如果外部代码可以再某个操作正常完成之前就将其置入"完成"状态,那么这个操作就是可以取消的.取消的原因有:用户请求取消.有时间限制的操作.应用程序事件.错误和关闭等 中断 如果使用某 ...

  6. java数组遍历、java方法定义

    1.遍历数组for与foreach String [] test =  {"java","php","bootstrap","vu ...

  7. jenkins构建基于gradle的springboot项目CI采坑(采用jar方式部署)

    试了一堆插件,最后用的还是 publish over SSH jenkins基本配置不多说了,就是配置一下git仓储,配置一下gradle执行命令 clean bootRepackage 之后执行Se ...

  8. Spring Boot 事件和监听

    Application Events and Listeners 1.自定义事件和监听 1.1.定义事件 package com.cjs.boot.event; import lombok.Data; ...

  9. CSS学习笔记2:伪类

    w3c对伪类的定义是:CSS伪类是用来添加一些选择器的特殊效果. 在我目前看来就是动态的对元素的修饰   它的基本语法是 选择器:伪类{} 伪类有以下几种   常用的伪类:     :link,:vi ...

  10. sniffer 简介

    http://www.doc88.com/p-095375416629.html 介绍sniffer的工作原理及简单介绍.