[BZOJ 3132] 上帝造题的七分钟
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=3132
[算法]
二维树状数组
[代码]
#include<bits/stdc++.h>
using namespace std;
#define MAXN 2050 int n,m,a,b,c,d;
int delta;
int bit[][MAXN][MAXN];
char op[]; inline int lowbit(int x)
{
return x & (-x);
}
inline void modify1(int x,int y,int val)
{
for (register int i = x; i <= n; i += lowbit(i))
{
for (register int j = y; j <= m; j += lowbit(j))
{
bit[][i][j] += val;
}
}
}
inline void modify2(int x,int y,int val)
{
for (register int i = x; i <= n; i += lowbit(i))
{
for (register int j = y; j <= m; j += lowbit(j))
{
bit[][i][j] += val;
}
}
}
inline void modify3(int x,int y,int val)
{
for (register int i = x; i <= n; i += lowbit(i))
{
for (register int j = y; j <= m; j += lowbit(j))
{
bit[][i][j] += val;
}
}
}
inline void modify4(int x,int y,int val)
{
for (register int i = x; i <= n; i += lowbit(i))
{
for (register int j = y; j <= m; j += lowbit(j))
{
bit[][i][j] += val;
}
}
}
inline int query1(int x,int y)
{
int ret = ;
for (register int i = x; i >= ; i -= lowbit(i))
{
for (register int j = y; j >= ; j -= lowbit(j))
{
ret += bit[][i][j];
}
}
return ret;
}
inline int query2(int x,int y)
{
int ret = ;
for (register int i = x; i >= ; i -= lowbit(i))
{
for (register int j = y; j >= ; j -= lowbit(j))
{
ret += bit[][i][j];
}
}
return ret;
}
inline int query3(int x,int y)
{
int ret = ;
for (register int i = x; i >= ; i -= lowbit(i))
{
for (register int j = y; j >= ; j -= lowbit(j))
{
ret += bit[][i][j];
}
}
return ret;
}
inline int query4(int x,int y)
{
int ret = ;
for (register int i = x; i >= ; i -= lowbit(i))
{
for (register int j = y; j >= ; j -= lowbit(j))
{
ret += bit[][i][j];
}
}
return ret;
}
inline void Modify(int x,int y,int delta)
{
modify1(x,y,delta);
modify2(x,y,x * delta);
modify3(x,y,y * delta);
modify4(x,y,x * y * delta);
}
inline int Query(int x,int y)
{
int v1 = query1(x,y),v2 = query2(x,y),v3 = query3(x,y),v4 = query4(x,y);
int ans1 = x * (v1 * y - v3 + v1);
int ans2 = v2 * y - v4 + v2;
int ans3 = v1 * y - v3 + v1;
return ans1 - ans2 + ans3;
} int main()
{ scanf("%s%d%d",&op,&n,&m);
while (scanf("%s",&op) != EOF)
{
if (op[] == 'L')
{
scanf("%d%d%d%d%d",&a,&b,&c,&d,&delta);
Modify(a,b,delta);
Modify(a,d + ,-delta);
Modify(c + ,b,-delta);
Modify(c + ,d + ,delta);
} else
{
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%d\n",Query(c,d) - Query(a - ,d) - Query(c,b - ) + Query(a - ,b - ));
}
} return ; }
[BZOJ 3132] 上帝造题的七分钟的更多相关文章
- BZOJ 3132: 上帝造题的七分钟( 二维BIT )
二维树状数组... 自己YY一下再推一下应该可以搞出来... --------------------------------------------------------------------- ...
- BZOJ 3132(上帝造题的七分钟-树状数组求和+2D逆求和数组)
3132: 上帝造题的七分钟 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 46 Solved: 18[Submit][Status][Discus ...
- BZOJ 3132 上帝造题的七分钟(二维树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3132 题意:给出一个矩阵,两种操作:(1)将某个子矩阵的数字统一加上某个值:(2)查询某 ...
- bzoj 3132: 上帝造题的七分钟 (二维树状数组)
推推公式,最后变成四个东西的前缀和 然后不知道为什么一直wa,数据在本地测是没有错的& 好心的管理员还给了某位p党大神a了的代码,感人肺腑(虽然还是没发现到底我的程序是问题) var f1,f ...
- BZOJ 3132: 上帝造题的七分钟 树状数组+差分
这个思路很巧妙啊 ~ code: #include <cstdio> #include <algorithm> #define N 2050 #define ll int #d ...
- BZOJ 3038: 上帝造题的七分钟2
3038: 上帝造题的七分钟2 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分 ...
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1469 Solved: 631[Submit][Status][Dis ...
- bzoj 3038: 上帝造题的七分钟2 线段树||hdu 4027
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1066 Solved: 476[Submit][Status][Dis ...
- BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)
题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...
随机推荐
- 取得数据库中数据 查询条件where使用规则
string where = string.Format("DnX < {0} and DnD > {0} and Types = '{1}' and Type1 = '{2}' ...
- CAD得到0层上的所有实体(com接口VB语言)
主要用到函数说明: IMxDrawSelectionSet::Select 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARIA ...
- The following packages have unmet dependencies:
root@ubuntu:~# apt-get install open-iscsiReading package lists... DoneBuilding dependency treeReadin ...
- iptables详解(1):iptables概念
所属分类:IPtables Linux基础 基础知识 常用命令 这篇文章会尽量以通俗易懂的方式描述iptables的相关概念,请耐心的读完它. 防火墙相关概念 此处先描述一些相关概念. 从逻辑上 ...
- Linux下“任务管理器”
也不知道linux叫不叫任务管理器. Ctrl+Alt+T打开终端,输入top,就会出现一堆东西. 如果有个东西未响应了,就可以输入k+这个进程的pid就可以杀死它. https://blog.csd ...
- codechef营养题 第二弹
第二弾が始まる! codechef problems 第二弹 一.Backup Functions 题面 One unavoidable problem with running a restaura ...
- [bzoj1004][HNOI2008][Cards] (置换群+Burnside引理+动态规划)
Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...
- Adobe AIR 代码签名证书使用指南
Symantec,Thawte,GlobalSign 签发的代码签名证书都可以签名AIR文件.如果您还没有代码签名证书,请联系易维信(EVTrust)购买Adobe AIR 代码签名证书. 1.签名工 ...
- 【02】bootstrap起步
起步 简要介绍 Bootstrap,以及如何下载.使用,还有基本模版和案例,等等. 下载 Bootstrap (当前版本 v3.3.5)提供以下几种方式帮你快速上手,每一种方式针对具有不同技能等级的开 ...
- Spring 进行junit单元测试时,出现method ‘initializationError’ 错误
首先检查一下所有的方法是否为public 然后看是否有commons-logging这个日志包