P4514 上帝造题的七分钟
P4514 上帝造题的七分钟
题意: 二维区间修改 区间查询
**错误日志: 写了个 4 重循环忘记调用 \(i\) **
Solution
二维树状数组 巨尼玛毒瘤
听说二维线段树会 \(MLE\) 反正我两个都不会 就学了二维树状数组
然而这是什么东西啊太恶心了
首先是推导:
设 \(b[x][y]\) 为二维增量数组, 那么有:
$$(xy + x + y + 1)\sum_{i = 1}^{x}\sum_{j = 1}^{y}b[i][j] - (x +1)\sum_{i = 1}^{x}\sum_{j = 1}^{y}j * b[i][j] - (y + 1)\sum_{i = 1}^{x}\sum_{j = 1}^{y}i * b[i][j] + \sum_{i = 1}^{x}\sum_{j = 1}^{y}ij * b[i][j]\]
所以, 我们维护 \(b[i][j], b[i][j] * i, b[i][j] * j, b[i][j] * i * j\) 这四个前缀和即可 二维树状数组区间修改区间查询
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 4019;
int lenx, leny;
int num, na;
#define lowbit(i) ((i) & (-i))
int c[maxn][maxn][4];
void update(int x, int y, int val, int o){
if(x < 1 || x > lenx || y < 1 || y > leny)return ;
if(o == 0)val = val;
else if(o == 1)val *= x;
else if(o == 2)val *= y;
else val *= x * y;
for(int i = x;i <= lenx;i += lowbit(i))
for(int j = y;j <= leny;j += lowbit(j))
c[i][j][o] += val;
}
int get_sum(int x, int y, int o){
int ans = 0;
for(int i = x;i > 0;i -= lowbit(i))
for(int j = y;j > 0;j -= lowbit(j))
ans += c[i][j][o];
return ans;
}
void uprange(int x1, int y1, int x2, int y2, int val){
for(int i = 0;i < 4;i++){
update(x1, y1, val, i), update(x1, y2 + 1, -val, i);
update(x2 + 1, y2 + 1, val, i), update(x2 + 1, y1, -val, i);
}
}
int query(int x, int y){
return
(x * y + x + y + 1) * get_sum(x, y, 0) -
(x + 1) * get_sum(x, y, 2) -
(y + 1) * get_sum(x, y, 1) +
get_sum(x, y, 3);
}
char cmd;
int main(){
cin>>cmd;lenx = RD();leny = RD();
while(cin>>cmd){
int x1 = RD(), y1 = RD(), x2 = RD(), y2 = RD();
if(cmd == 'L'){
int val = RD();
uprange(x1, y1, x2, y2, val);
}
else{
printf("%d\n",
query(x2, y2) +
query(x1 - 1, y1 - 1) -
query(x2, y1 - 1) -
query(x1 - 1, y2)
);
}
}
}
P4514 上帝造题的七分钟的更多相关文章
- 洛谷 P4514 上帝造题的七分钟 解题报告
P4514 上帝造题的七分钟 题目背景 裸体(裸题)就意味着身体(神题). 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n \times m\)矩阵. 第二 ...
- [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...
- P4514 上帝造题的七分钟——二维树状数组
P4514 上帝造题的七分钟 求的是矩阵里所有数的和: 维护四个树状数组: #include<cstdio> #include<cstring> #include<alg ...
- P4514 上帝造题的七分钟(二维树状数组)
P4514 上帝造题的七分钟 二维树状数组 差分维护区间加法,区间求和 #include<cstdio> int read(){ ,f=; ') f=f&&(c!='-') ...
- 洛谷P4514 上帝造题的七分钟
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了000的n×mn×mn×m矩阵. 第二分钟,L说,要能修改,于是便有 ...
- 二维树状数组总结&&【洛谷P4514】 上帝造题的七分钟
P4514 上帝造题的七分钟 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了00的n×mn×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b)(a,b),右下 ...
- 【BZOJ3211&3038】花神游历各国&上帝造题的七分钟2(CodeVS)
Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 ...
- C++之路进阶——codevs2492(上帝造题的七分钟 2)
2492 上帝造题的七分钟 2 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟&g ...
- 【BZOJ】3038: 上帝造题的七分钟2(线段树+暴力)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=3038 这题我就有得吐槽了,先是线段树更新写错,然后不知哪没pushup导致te,精度问题sq ...
随机推荐
- 欢迎来怼--第三十七次Scrum会议
一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/12/3 17:50~18:23,总计33min. 地点 ...
- final发布--PSP Daily软件功能书(最终版)
一.开发背景 你在完成了一周的软件工程作业后,需要提交一个PSP图表,里面有4项,如下所示: 1.本周PSP表格,包含每项任务的开始.中断.结束.最终时间,格式如下: 2.本周进度条,包含从开始到现在 ...
- Buaaclubs项目介绍
简介 首先,它是社团资讯的集散地,任何希望了解北航社团信息或活动情况的同学都可以在这个平台上获取自己需要的信息,并且可以随时随地地参与社团互动,方便快捷地实现网上报名.在线咨询.活动参与等多种功能. ...
- OO学习第一阶段总结
前言 虽然之前接触过java,也写过一些1000行左右的程序.可以说面向对象的思想和java的一些基本语法对我来说是没有难度的,但是这学期的面向对象依然给了我一个下马威.这几次的作业每次都很让我头疼. ...
- C++:类中两个易被忽略的默认函数
C++的自定义类中有六个默认的函数,即如果用户没有显式定义这些函数时,C++编译器会类中生成这些函数的默认形式.除了大家所熟知的构造函数.拷贝构造函数.赋值函数和析构函数外,C++为自定义类 还提供了 ...
- HDU 3092 Least common multiple 01背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3092 Least common multiple Time Limit: 2000/1000 MS ...
- 【搜索】POJ-3009 DFS+回溯
一.题目 Description On Planet MM-21, after their Olympic games this year, curling is getting popular. B ...
- Oracle 11G RAC For Windows 2008 R2部署手册(亲测,成功实施多次)
总体规划 服务器规划 1.建议使用两台硬件配置一模一样的服务器来作为 RAC 环境的两个物理节点 2.服务器至少需要配置两块物理网卡 3.服务器规划表: 节点 主机名 本地磁盘大小 操作系统 内存大小 ...
- Linux 压缩 解压缩 命令相关
1.命令格式:tar[必要参数][选择参数][文件] 2.命令功能:用来压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的 3.命令参数:必要参数有如下:-A 新增压缩文件到已存在的压缩 ...
- [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网 ...