SPOJ 1029 Matrix Summation

点击打开SPOJ 1029

思路: 二维树状数组

分析:

1 简单的二维树状数组,注意因为数据量很大TLE了多次,之后把memset改成for循环A了

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 1100;

int n;
int mat[MAXN][MAXN];
int treeNum[MAXN][MAXN];

int lowbit(int x){
    return x&(-x);
}

void add(int x , int y , int val){
    for(int i = x ; i < MAXN ; i += lowbit(i))
        for(int j = y ; j < MAXN ; j += lowbit(j))
            treeNum[i][j] += val;
}

long long getSum(int x , int y){
    long long ans = 0;
    for(int i = x ; i > 0 ; i -= lowbit(i))
        for(int j = y ; j > 0 ; j -= lowbit(j))
            ans += treeNum[i][j];
    return ans;
}

void solve(){
    char str[10];
    int x , y , val;
    int x1 , y1 , x2 , y2;
    while(scanf("%s" , str) && str[0] != 'E'){
        if(str[1] == 'E'){
            scanf("%d%d%d%*c" , &x , &y , &val);
            add(x+1 , y+1 , val-mat[x+1][y+1]);
            mat[x+1][y+1] = val;
        }
        else{
            scanf("%d%d%d%d%*c" , &x1 , &y1 , &x2 , &y2);
            x1++ , y1++ , x2++ , y2++;
            long long ans = getSum(x2 , y2);
            ans -= getSum(x1-1 , y2);
            ans -= getSum(x2 , y1-1);
            ans += getSum(x1-1 , y1-1);
            printf("%lld\n" , ans);
        }
    }
}

int main(){
    int cas;
    scanf("%d" , &cas);
    while(cas--){
        scanf("%d%*c" , &n);
        for(int i = 0 ; i <= n ; i++)
            for(int j = 0 ; j <= n ; j++)
                treeNum[i][j] = mat[i][j] = 0;
        solve();
    }
    return 0;
}
时间: 2024-09-18 01:02:29

SPOJ 1029 Matrix Summation的相关文章

树状数组专题【完结】

1 国外的论文点击打开链接 2 我的总结点击打开链接 任何能够造成树状数组下表为0的操作都会使得程序TLE,这是个很重要的地方! 第一题 poj 2299 Ultra-QuickSort 点击打开poj 2299 思路: 离散化+树状数组 分析: 1 题目的意思就是要求逆序数对 2 题目的输入个数有500000的规模但是每个数的最大值为999999999,因此我们需要离散化这些数据 3 对于数据9 1 0 5 4我们离散化成5 2 1 4 3 那么对于输入一个树a[i]我们去求一下它的离散化后的

imageview-关于android ImageView Matrix变换矩阵的一个问题,求赐教!

问题描述 关于android ImageView Matrix变换矩阵的一个问题,求赐教! 关于android ImageView Matrix变换矩阵的一个问题,求赐教! 在获取ImageMatrix中的的缩放比率的时时候居然会得到0.负数等,这是种么回事? float[] values = new float[9]; mImageView.getImageMatrix().getValues(values); float scaleX = values[Matrix.MSCALE_X]; f

Android Paint、Canvas、Matrix使用讲解(一、Paint)

http://blog.csdn.net/tianjian4592/article/details/44336949 好了,前面主要讲了Animation,Animator 的使用,以及桌面火箭效果和水波纹效果,分别使用android框架和自己绘制实现,俗话说,工欲善其事,必先利其器,接下来几篇文章主要讲绘制中我们需要常使用的一些利器: Paint:画笔 Canvas:画布 Matrix:变换矩阵 绘制动效确实就像拿着笔在画布上面画画一样,而Paint就是我们拿着的笔,Canvas就是使用的画布

ADO.NET 2.0 Feature Matrix

ado ADO.NET 2.0 Feature MatrixBob BeaucheminDevelopMentorJuly 2004Applies to:Microsoft ADO.NET 2.0Microsoft SQL Server 2005Summary: ADO.NET 2.0 includes a new base-class provider model, features for all providers, andchanges to System.Data.SqlClient.

PHP+&amp;#106avascript模拟Matrix画面

直接存为*.php文件运行即可. <? $color_back="#000000"; $number_w=8; $number_h=6; $space=1; $font_size=20; $speed=0; ?> <html> <head> <title>The Matrix</title> <meta http-equiv="Content-Type" content="text/html

PHP+Javascript模拟Matrix画面

直接存为*.php文件运行即可. <?   $color_back="#000000";   $number_w=8;   $number_h=6;   $space=1;   $font_size=20;   $speed=0; ?> <html> <head> <title>The Matrix</title> <meta http-equiv="Content-Type" content=&qu

Flash中步入Matrix函数

函数 因为工作忙,所以很久没有出来写教程了.今天就来写个目前Flash 8所提供的新函数,在中文网站中也还没有看到的,这应该比较新鲜吧 看到标题也许很多数学不好或中学时上课打盹的朋友会感到反感,但放心的是在这里的Matrix已经简化了很多琐碎的步骤,也不用大家拿一张纸拼命的做计算.对想制作游戏的朋友也是必学的路程,所以大致上明白了运用的思路就可以说掌握了技巧. 在字典中的说明不够充分让大家去理解,所以开始还是要重复说明一下.Matrix矩阵就像个数组,排列方式是以列与行组成.在flash 8中所

SPOJ Problem Set 2. Prime Generator 求某区间质数题解

题目大意: 给定两个数,要求产生这两个数之间的所有质数. 两个数位m和n,其范围如下: The input begins with the number t of test cases in a single line (t<=10). In each of the next t lines there are two numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by a space.

SPOJ 查找下一个回文Palindrome 算法题解

给出一个数值,well,其实不是数值了,而是一大串数字, 比如 98237482340328490328490324893024,非常长的数字. 找出下一个Palindrome,这个Palindrome在数值上要比当前数值大(不能等于). 如: 9 9 9 9->1 0 0 0 1 1 2 3 4 5 ->1 2 4 2 1 本算法时间效率是O(n),其中n是指数值的位数,不是数值,比如123456789,只有9位,那么本算法接近常数: 更多精彩内容:http://www.bianceng.c