bzoj3132 上帝造题的七分钟(差分+二维树状数组)


bzoj3132 上帝造题的七分钟(差分+二维树状数组)

  Time Limit: 20 Sec
  Memory Limit: 128 MB

Description

   “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵。
   第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作。
   第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作。
   第四分钟,彩虹喵说,要基于二叉树的数据结构,于是便有了数据范围。
   第五分钟,和雪说,要有耐心,于是便有了时间限制。
   第六分钟,吃钢琴男说,要省点事,于是便有了保证运算过程中及最终结果均不超过32位有符号整数类型的表示范围的限制。
   第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。”
   ——《上帝造裸题的七分钟》
   所以这个神圣的任务就交给你了。
 

Input

   输入数据的第一行为X n m,代表矩阵大小为n×m。
   从输入数据的第二行开始到文件尾的每一行会出现以下两种操作:
     L a b c d delta —— 代表将(a,b),(c,d)为顶点的矩形区域内的所有数字加上delta。
     k a b c d   —— 代表求(a,b),(c,d)为顶点的矩形区域内所有数字的和。
   请注意,k为小写。
 

Output

   针对每个k操作,在单独的一行输出答案。

Sample Input

   X 4 4
   L 1 1 3 3 2
   L 2 2 4 4 1
   k 2 2 3 3
   > 

Sample Output

  12

HINT

  对于100%的数据,1 ≤ n ≤ 2048, 1 ≤ m ≤ 2048, 1 ≤ abs(delta) ≤ 500,操作不超过200000个,保证运算过程中及最终结果均不超过32位带符号整数类型的表示范围。

题目地址:bzoj3132 上帝造题的七分钟

题目大意: 题目很简洁了:)

题解:

  dalao写的文章真的好 RabbitHu
  刷历年noip ing
  自己代码写太好了过来贴一发        自恋中



AC代码

#include <cstdio>
using namespace std;
const int N=2050;
int n,m,x0,y0,x1,y1,delta;
int A[N][N],B[N][N],C[N][N],D[N][N];
char ch;
void change(int x,int y,int val){
    x++,y++;
    for(int i=x;i<=n;i+=i&(-i))
        for(int j=y;j<=m;j+=j&(-j)){
            A[i][j]+=val;
            B[i][j]+=val*i;
            C[i][j]+=val*j;
            D[i][j]+=val*i*j;
        }
}
int query(int x,int y){
    x++,y++;
    int res=0;
    for(int i=x;i>=1;i-=i&(-i))
        for(int j=y;j>=1;j-=j&(-j))
            res+=A[i][j]*(x+1)*(y+1)-B[i][j]*(y+1)-C[i][j]*(x+1)+D[i][j];
    return res;
}
int main(){
    scanf("%c%d%d\n",&ch,&n,&m);
    while(scanf("%c",&ch)!=EOF){
        if(ch=='L'){
            scanf("%d%d%d%d%d\n",&x0,&y0,&x1,&y1,&delta);
            change(x0,y0,delta);
            change(x0,y1+1,-delta);
            change(x1+1,y0,-delta);
            change(x1+1,y1+1,delta);
        }else{
            scanf("%d%d%d%d\n",&x0,&y0,&x1,&y1);
            printf("%d\n",query(x1,y1)-query(x1,y0-1)-query(x0-1,y1)+query(x0-1,y0-1));
        }
    }
    return 0;
}

  作者:skl_win

  出处:https://www.cnblogs.com/shaokele/

  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/shaokele/p/9910997.html

时间: 2024-12-04 10:03:47

bzoj3132 上帝造题的七分钟(差分+二维树状数组)的相关文章

[BZOJ 3038]上帝造题的7分钟2(树状数组)

分析:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3038 这题看起来没办法做……但是注意到1e12只要开方8次就能到1……所以直接暴力就行了……

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

P1716 - 上帝造题的七分钟 From Riatre    Normal (OI)总时限:50s    内存限制:128MB    代码长度限制:64KB 背景 Background 裸体就意味着身体. 描述 Description “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵.第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作.第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作.第

二维树状数组的区间加减及查询 tyvj 1716 上帝造题的七分钟

具体解释见小结.http://blog.csdn.net/zmx354/article/details/31740985 #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <cmath> #include <stack>

【树状数组】BZOJ3132 上帝造题的七分钟

3132: 上帝造题的七分钟 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1004  Solved: 445[Submit][Status][Discuss] Description "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. 第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作.

POJ2155/LNSYOJ113 Matrix【二维树状数组+差分】【做题报告】

这道题是一个二维树状数组,思路十分神奇,其实还是挺水的 题目描述 给定一个N∗NN∗N的矩阵AA,其中矩阵中的元素只有0或者1,其中A[i,j]A[i,j]表示矩阵的第i行和第j列(1≤i,j≤N)(1≤i,j≤N),初始矩阵元素都是0.在矩阵上进行TT次操作,操作有以下两种: (1)格式为C x1 y1 x2 y2(1≤x1≤x2≤n,1≤y1≤y2≤n)C x1 y1 x2 y2(1≤x1≤x2≤n,1≤y1≤y2≤n) ,其中CC为字符“C”,表示把以(x1,y1)(x1,y1)为左上角,

二维树状数组(水题) POJ1195

前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用线段树想一想其实只是线段树编号不同而已,本质类似) 写了下二维树状数组,几乎和一维相同,也没必要不同. #include <cstdio> #include <cstring> int l,r,x,y,n,a,p,sum[1125][1125]; inline int lowbit(i

二维树状数组模板(区间修改+区间查询)

二维树状数组模板(区间修改+区间查询) 例题:JOIOI上帝造题的七分钟 一共两种操作: \(L\ x_1\ y_1\ x_2\ y_2\ d\):把\((x_1,y_1)\),\((x_2,y_2)\)这个矩形内所有元素加\(d\). \(k\ x_1\ y_1\ x_2\ y_2\):查询\((x_1,y_1)\),\((x_2,y_2)\)这个矩形内所有元素的和. 代码如下: #include<bits/stdc++.h> #define RG register #define IL i

POJ1195 Mobile phones 【二维树状数组】

Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14288   Accepted: 6642 Description Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows. The area is divided into squares. The

POJ1195(二维树状数组)

Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 17176   Accepted: 7920 Description Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows. The area is divided into squares. The