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 上帝造题的七分钟 解题报告的更多相关文章

  1. 洛谷P4514 上帝造题的七分钟

    P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了000的n×mn×mn×m矩阵. 第二分钟,L说,要能修改,于是便有 ...

  2. 洛谷P4145 上帝造题的七分钟2/花神游历各国 [树状数组,并查集]

    题目传送门 题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是 ...

  3. 洛谷P4145——上帝造题的七分钟2 / 花神游历各国

    题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...

  4. 洛谷P4145 上帝造题的七分钟2 / 花神游历各国(重题:洛谷SP2713 GSS4 - Can you answer these queries IV)

    题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...

  5. 洛谷 P4145 上帝造题的七分钟2 / 花神游历各国

    洛谷 这题就是区间开根号,区间求和.我们可以分块做. 我们记布尔数组vis[i]表示第i块中元素是否全部为1. 因为显然当一个块中元素全部为1时,并不需要对它进行根号操作. 我们每个块暴力开根号,因为 ...

  6. 洛谷P4145上帝造题的七分钟——区间修改

    题目:https://www.luogu.org/problemnew/show/P4145 区间开平方,可以发现其实开几次就变成1,不需要开了,所以标记一下,每次只去开需要开的地方: 原来写的并查集 ...

  7. [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)

    P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...

  8. P4514 上帝造题的七分钟

    P4514 上帝造题的七分钟 题意: 二维区间修改 区间查询 --- 错误日志: 写了个 4 重循环忘记调用 \(i\) Solution 二维树状数组 巨尼玛毒瘤 听说二维线段树会 \(MLE\) ...

  9. P4514 上帝造题的七分钟——二维树状数组

    P4514 上帝造题的七分钟 求的是矩阵里所有数的和: 维护四个树状数组: #include<cstdio> #include<cstring> #include<alg ...

随机推荐

  1. tp3.2 excel导出

    //导出操作 function exportExcel($expTitle,$expCellName,$expTableData,$names,$width){ $xlsTitle = iconv(' ...

  2. float 浮动详解

    浮动(float):浮动原先设定时主要是用于文本环绕图像设定的,后来发现其在css布局中有很大的帮助,故渐渐使用浮动. 浮动后的元素脱离了文档的普通流,使得浮动的元素不占据文档的位置,其他元素可以覆盖 ...

  3. kivy学习二:做一个查询所在地区身份证前6位的小软件

    经过半个月的尝试,终于成功,记录下来备查! 做完之后发现有很多的问题没有解决,请大佬多批评指教! 强烈建议:学习KIVY的查看官方文档 需要用的知识: 1.字典的相关知识 2.kivy的下拉列表(Dr ...

  4. linux系统集群之高可用(一)HA

    HA(High aviliable)高可用 高可用的需求 在很多公司里面,都会存在着一些不愿被中断的业务,但是由于硬件故障,软件故障,人为因素等各种因素,往往会不经意的造成我们重要的业务中断,因此高可 ...

  5. POJ:1703-Find them, Catch them(并查集好题)(种类并查集)

    Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 49867 Accepted: 153 ...

  6. 笔记-git-git服务器安装及配置

    笔记-git-git服务器安装及配置 1.      GIT服务器简介 Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议.下面分别介绍一下哪些情形应该使 ...

  7. Matplotlib库介绍

    pyplot的plot()函数 pyplot的中文显示 pyplot的文本显示 pyplot的子绘图区域

  8. java练习——多态与异常处理

    1.   上面的程序运行结果是什么? 2.   你如何解释会得到这样的输出? parent = chlid; 所以child中的方法被赋予parent,所以用child方法输出了child的成员变量: ...

  9. Java线程和多线程(六)——守护线程

    当我们在Java中创建线程的时候,这个线程在默认的情况下是一个用户线程,并且,如果这个线程在运行,那么JVM就不会终结这个应用.和用户线程不同,当一个线程被标记为守护线程的时候,JVM在用户线程结束的 ...

  10. (A)eclipse搭建springboot项目入门

    网上许多资料都是用idea的,但是我个人用eclipse习惯了,所以就在eclipse里面自己尝试着写了一个hello. 然而项目建好后却迟迟不能访问!!!网上搜了许多资料都不靠谱! 虽然最后能看到h ...