洛谷 P4514 上帝造题的七分钟 解题报告
P4514 上帝造题的七分钟
题目背景
裸体(裸题)就意味着身体(神题)。
题目描述
“第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n \times m\)矩阵。
第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\),右下角为\((c,d)\)的一个矩形区域内的全部数字加上一个值的操作。
第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作。
第四分钟,彩虹喵说,要基于二叉树的数据结构,于是便有了数据范围。
第五分钟,和雪说,要有耐心,于是便有了时间限制。
第六分钟,吃钢琴男说,要省点事,于是便有了保证运算过程中及最终结果均不超过32位有符号整数类型的表示范围的限制。
第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。”
——《上帝造裸题的七分钟》
所以这个神圣的任务就交给你了。
输入输出格式
输入格式:
输入数据的第一行为\(X\) \(n\) \(m\),代表矩阵大小为\(n \times m\)。
从输入数据的第二行开始到文件尾的每一行会出现以下两种操作:
L a b c d delta —— 代表将\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(delta\)。
k a b c d —— 代表求\((a,b),(c,d)\)为顶点的矩形区域内所有数字的和。
请注意,\(k\)为小写。
输出格式:
针对每个k操作,在单独的一行输出答案。
说明
对于\(10\%\)的数据,\(1 ≤ n ≤ 16, 1 ≤ m ≤ 16\), 操作不超过200个.
对于\(60\%\)的数据,\(1 ≤ n ≤ 512, 1 ≤ m ≤ 512\).
对于\(100\%\)的数据,\(1 ≤ n ≤ 2048, 1 ≤ m ≤ 2048, -500 ≤ delta ≤ 500\),操作不超过200000个,保证运算过程中及最终结果均不超过32位带符号整数类型的表示范围。
by XLk
说起来上午推了倒是退出来了,但是没搞清楚把什么放在外面乘结果错了有点怀疑人生看了题解发现自己还搞麻烦了(我太蒻了
很显然是胡乱对差分数组搞事的题目
设差分数组\(d_{i,j}\)
则有\(a_{x,y}=\sum_{i=1}^{x} \sum_{j=1}^y d_{i,j}\)
对于前缀和再求一次
\(f_{i,j}=\sum_{i=1}^{x} \sum_{j=1}^{y} \sum_{k=1}^{i} \sum_{l=1}^{y} d_{i,j}\)
\(=\sum_{i=1}^{x} \sum_{j=1}^{y} (x+1-i) \times (y+1-j) d_{i,j}\)
\(=(x+1) \times (y+1) \sum_{i=1}^{x} \sum_{j=1}^{y} d_{i,j} -(y+1) \sum_{i=1}^{x} \sum_{j=1}^{y} i \times d_{i,j} -(x+1) \sum_{i=1}^{x} \sum_{j=1}^{y} j \times d_{i,j} +\sum_{i=1}^{x} \sum_{j=1}^{y} i \times j \times d_{i,j}\)
二维维护四个什么和就行了
(我上午傻乎乎的把所有的\(x\),\(y\)啊全甩进去了。。
Code:
#include <cstdio>
const int N=2500;
int s[4][N][N],n,m;
int query(int typ,int x,int y)
{
int ans=0;
for(int i=x;i;i-=i&-i)
for(int j=y;j;j-=j&-j)
ans+=s[typ][i][j];
return ans;
}
void change(int typ,int x,int y,int delta)
{
for(int i=x;i<=n;i+=i&-i)
for(int j=y;j<=m;j+=j&-j)
s[typ][i][j]+=delta;
}
void modify(int x,int y,int delta)
{
change(0,x,y,delta);
change(1,x,y,y*delta);
change(2,x,y,x*delta);
change(3,x,y,x*y*delta);
}
int ask(int x,int y)
{
int ans=0;
ans+=(x+1)*(y+1)*query(0,x,y);
ans-=(x+1)*query(1,x,y);
ans-=(y+1)*query(2,x,y);
ans+=query(3,x,y);
return ans;
}
int main()
{
char op[4];int a,b,c,d,de;
scanf("%s%d%d",op,&n,&m);
while(scanf("%s%d%d%d%d",op,&a,&b,&c,&d)!=EOF)
{
if(op[0]=='L')
{
scanf("%d",&de);
modify(a,b,de);
modify(a,d+1,-de);
modify(c+1,b,-de);
modify(c+1,d+1,de);
}
else
{
int ans=0;
ans+=ask(c,d);
ans-=ask(a-1,d);
ans-=ask(c,b-1);
ans+=ask(a-1,b-1);
printf("%d\n",ans);
}
}
return 0;
}
2018.9.4
洛谷 P4514 上帝造题的七分钟 解题报告的更多相关文章
- 洛谷P4514 上帝造题的七分钟
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了000的n×mn×mn×m矩阵. 第二分钟,L说,要能修改,于是便有 ...
- 洛谷P4145 上帝造题的七分钟2/花神游历各国 [树状数组,并查集]
题目传送门 题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是 ...
- 洛谷P4145——上帝造题的七分钟2 / 花神游历各国
题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...
- 洛谷P4145 上帝造题的七分钟2 / 花神游历各国(重题:洛谷SP2713 GSS4 - Can you answer these queries IV)
题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...
- 洛谷 P4145 上帝造题的七分钟2 / 花神游历各国
洛谷 这题就是区间开根号,区间求和.我们可以分块做. 我们记布尔数组vis[i]表示第i块中元素是否全部为1. 因为显然当一个块中元素全部为1时,并不需要对它进行根号操作. 我们每个块暴力开根号,因为 ...
- 洛谷P4145上帝造题的七分钟——区间修改
题目:https://www.luogu.org/problemnew/show/P4145 区间开平方,可以发现其实开几次就变成1,不需要开了,所以标记一下,每次只去开需要开的地方: 原来写的并查集 ...
- [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...
- P4514 上帝造题的七分钟
P4514 上帝造题的七分钟 题意: 二维区间修改 区间查询 --- 错误日志: 写了个 4 重循环忘记调用 \(i\) Solution 二维树状数组 巨尼玛毒瘤 听说二维线段树会 \(MLE\) ...
- P4514 上帝造题的七分钟——二维树状数组
P4514 上帝造题的七分钟 求的是矩阵里所有数的和: 维护四个树状数组: #include<cstdio> #include<cstring> #include<alg ...
随机推荐
- JIRA 6.3的那些事(1):linux环境安装
一直以来,自认为对JIRA是还算比较熟悉 从3.x 就开始使用,然后用4.x 近期公司对BUG系统进行选型: 我极力推荐JIRA ! 然后,JIRA 的安装.部署.配置任务就给到我了: 本以为应该是 ...
- LeetCode978. 最长湍流子数组
问题:978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[ ...
- JavaScript---ECMA对象
1.对象的概念及分类 1.1 ECMAScript中没有类,但定义了“对象”,逻辑上等价于其他程序设计语言中的类. var o = new Object(); 1.2 本地对象(native obje ...
- OpenLDAP部署目录服务
文档信息 目 的:搭建一套完整的OpenLDAP系统,实现账号的统一管理. 1:OpenLDAP服务端的搭建 ...
- C++ Primer 学习笔记_Chapter4 数组和指针–指针
一.什么是指针? 指针与迭代器一样,指针提供对其所指对象的间接访问,指针保存的是另一个对象的地址: string s("hello"); string *ps = &s; ...
- 中国剩余定理算法详解 + POJ 1006 Biorhythms 生理周期
转载请注明出处:http://exp-blog.com/2018/06/24/pid-1054/ #include <iostream> #include <cstdio> u ...
- 18式优雅你的Python
本文来自读者梁云同学的投稿,公众号:Python与算法之美 一,优雅你的Jupyter 1,更改Jupyter Notebook初始工作路径 平凡方法: 在cmd中输入jupyter notebook ...
- 关于原生JS获取class,ID等属性的一些封装
一.传统上获取是通过document.getElementById获取元素的ID属性,通过总结与学习总结一下获取元素class以及id属性的一些封装; 1.创建构造函数,这里面不需要多解释什么:(主要 ...
- 为什么工具类App,都要做一个社区?
非著名程序员涩郎 非著名程序员,字耿左直右,号涩郎,爱搞机,爱编程,是爬行在移动互联网中的一名码匠!个人微信号:loonggg,微博:涩郎,专注于移动互联网的开发和研究,本号致力于分享IT技术和程序猿 ...
- python 之发送邮件服务[原著] 海瑞博客
Python 发送邮件 使用默认的django的发送邮件,只适用于单邮箱. 作者:海瑞博客 http://www.hairuinet.com/ setting中配置 # send e-mail EMA ...