P4514 上帝造题的七分钟

求的是矩阵里所有数的和;

维护四个树状数组;

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int b[maxn][maxn],bi[maxn][maxn],bj[maxn][maxn],bij[maxn][maxn];
char s[];
int n,m,num; void add(int x,int y,int z) {for(int i=x;i<=n;i+=i&(-i)) for(int j=y;j<=m;j+=j&(-j)) b[i][j]+=z;}
void addi(int x,int y,int z) {for(int i=x;i<=n;i+=i&(-i)) for(int j=y;j<=m;j+=j&(-j)) bi[i][j]+=z;}
void addj(int x,int y,int z) {for(int i=x;i<=n;i+=i&(-i)) for(int j=y;j<=m;j+=j&(-j)) bj[i][j]+=z;}
void addij(int x,int y,int z) {for(int i=x;i<=n;i+=i&(-i)) for(int j=y;j<=m;j+=j&(-j)) bij[i][j]+=z;} int query_(int x,int y) { int ans=; for(int i=x;i;i-=i&(-i)) for(int j=y;j;j-=j&(-j)) ans+=b[i][j]; return ans;}
int query_i(int x,int y) { int ans=; for(int i=x;i;i-=i&(-i)) for(int j=y;j;j-=j&(-j)) ans+=bi[i][j]; return ans;}
int query_j(int x,int y) { int ans=; for(int i=x;i;i-=i&(-i)) for(int j=y;j;j-=j&(-j)) ans+=bj[i][j]; return ans;}
int query_ij(int x,int y) { int ans=; for(int i=x;i;i-=i&(-i)) for(int j=y;j;j-=j&(-j)) ans+=bij[i][j]; return ans;} void add_all(int x,int y,int num)
{
add(x,y,num);
addi(x,y,num*x);
addj(x,y,num*y);
addij(x,y,num*x*y);
} int query(int x,int y)
{
int ans=;
ans+=query_(x,y)*(x*y+x+y+)-query_i(x,y)*(y+)-query_j(x,y)*(x+)+query_ij(x,y);
return ans;
} int main()
{
scanf("%s%d%d",s,&n,&m);
while(~scanf("%s",s))
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(s[]=='L')
{
scanf("%d",&num);
add_all(x1,y1,num);
add_all(x1,y2+,-num);
add_all(x2+,y1,-num);
add_all(x2+,y2+,num);
}
else
{
printf("%d\n",query(x2,y2)-query(x2,y1-)-query(x1-,y2)+query(x1-,y1-));
} } return ;
}

我写的比较丑了,也可以将加入和查询操作放在结构体里面;

struct node
{
int tree[][]; int lowbit(int x) {return x&-x;} void add(int x,int y,int num)
{
for(int i=x; i<=n; i+=lowbit(i))
for(int j=y; j<=m; j+=lowbit(j))
tree[i][j]+=num;
} int query(int x,int y)
{
int res=;
for(int i=x; i>=; i-=lowbit(i))
for(int j=y; j>=; j-=lowbit(j))
res+=tree[i][j];
return res;
}
}b,bi,bj,bij;

差分和前缀和的思想;

P4514 上帝造题的七分钟——二维树状数组的更多相关文章

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

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

  2. 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询

    题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...

  3. 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组

    题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...

  4. [bzoj3132]上帝造题的七分钟——二维树状数组

    题目大意 你需要实现一种数据结构,支援以下操作. 给一个矩阵的子矩阵的所有元素同时加一个数. 计算子矩阵和. 题解 一看这个题,我就首先想到用线段树套线段树做. 使用二维线段树的错误解法 其实是第一次 ...

  5. BZOJ 3132: 上帝造题的七分钟( 二维BIT )

    二维树状数组... 自己YY一下再推一下应该可以搞出来... --------------------------------------------------------------------- ...

  6. POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】

    <题目链接> 题目大意: 给你一个H*W的矩阵,再告诉你有n个坐标有点,问你一个w*h的小矩阵最多能够包括多少个点. 解题分析:二维树状数组模板题. #include <cstdio ...

  7. P4514 上帝造题的七分钟(二维树状数组)

    P4514 上帝造题的七分钟 二维树状数组 差分维护区间加法,区间求和 #include<cstdio> int read(){ ,f=; ') f=f&&(c!='-') ...

  8. POJ 2155 Matrix (二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17224   Accepted: 6460 Descripti ...

  9. POJ_2155 Matrix 【二维树状数组】

    一.题面 POJ2155 二.分析 楼教主出的题,是二维树状数组非常好的题,还结合了开关问题(开关变化的次数如果为偶数,状态不变,奇数状态相反). 题意就是给了一个二维的坐标平面,每个点初始值都是0, ...

随机推荐

  1. PHP即时实时输出内容

    一般情况下,PHP都是将整个页面全部执行完成后,才会把要输出的内容发送回客户端. for ($i = 0; $i < 10; $i++) { echo $i; sleep(1); } 这段代码会 ...

  2. interface Part2(定义接口)

    一. 在 C# 语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的. 二. 一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承. 三. 无论是表 ...

  3. python入门-windows下anaconda环境搭建

    1. anaconda下载 根据根据自己系统下载32位还是64位,还有版本 python3.6——64bit python3.6——32bit python2.7——64bit python2.7—— ...

  4. 利用python爬取王者荣耀英雄皮肤图片

    前两天看到同学用python爬下来LOL的皮肤图片,感觉挺有趣的,我也想试试,于是决定来爬一爬王者荣耀的英雄和皮肤图片. 首先,我们找到王者的官网http://pvp.qq.com/web201605 ...

  5. 正padding负margin实现多列等高布局(转)

    转自: 巧妙运用CSS中的负值 (http://www.webhek.com/post/2345qwerqwer.html) 代码来自: https://codepen.io/Chokcoco/pen ...

  6. 时间都去哪儿了?开源一个统计iPhone上App运行时间和打开次数的小工具【iOS8已失效】

    如今,大家每天都有大量时间花在手机上,但是,大家有没有想过自己的时间都花在哪些App上了呢?相信很多人都有这样的需求,不过iOS系统本身并不能显示每个App的运行时间和次数,因此,本人写了这样一个小工 ...

  7. 异常-Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hdfs, access=WRITE, inode="/hbase":root:supergroup:drwxr-xr-x

    1 详细异常 Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlExce ...

  8. Linux命令——ps、pstree

    转载请注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9814883.html ps 简介 ps(processes status)是Unix / Linu ...

  9. 16 Windows编程——系统内置窗口子类型之edit、ComboBox、ownerbutton、listbox

    edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_CO ...

  10. JSON【1】

    http://repo1.maven.org/maven2/com/fasterxml/jackson/core/    JSON[jar]包下载 JSON是什么? 是一种轻量级的数据交换格式,完全独 ...