zoukankan      html  css  js  c++  java
  • hiho 172周

    题目链接

    描述

    You are given an N × N matrix. At the beginning every element is 0. Write a program supporting 2 operations:

     1. Add x y value: Add value to the element Axy. (Subscripts starts from 0

    2. Sum x1 y1 x2 y1: Return the sum of every element Axy for x1xx2, y1yy2.

    输入

    The first line contains 2 integers N and M, the size of the matrix and the number of operations.

    Each of the following M line contains an operation.

    1 ≤ N ≤ 1000, 1 ≤ M ≤ 100000

    For each Add operation: 0 ≤ x < N, 0 ≤ y < N, -1000000 ≤ value ≤ 1000000

    For each Sum operation: 0 ≤ x1x2 < N, 0 ≤ y1y2 < N

    输出

    For each Sum operation output a non-negative number denoting the sum modulo 109+7.

    ----------------------------------------------------------------------------------------------------------------------

    破题,non-negative number denoting the sum modulo ,wa了好几次

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    typedef long long LL;
    
    using namespace std;
    const int N = 1024;
    const LL MOD = 1e9+7;
    
    int n,m;
    LL sum[N][N];
    int lowbit(int data){
        return data&(-data);
    }
    
    void add(int x,int y,int d){
        for(int i=x;i<=n;i+=lowbit(i))
        for(int j=y;j<=n;j+=lowbit(j)){
            sum[i][j] += d;
            sum[i][j] %= MOD;
        }
    }
    LL query(int x,int y){
        LL ret = 0;
        for(int i=x;i>0;i-=lowbit(i))
        for(int j=y;j>0;j-=lowbit(j)){
            ret += sum[i][j];
            ret %= MOD;
        }
        return ret;
    }
    int main(){
        cin>>n>>m; char str[16];
        memset(sum,0,sizeof(sum));
        int x1,y1,x2,y2,d;
        while(m--){
            scanf("%s",str);
            if(str[0]=='A'){
                scanf("%d%d%d",&x1,&y1,&d);
                add(x1+1,y1+1,d);
            }
            else{
                scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                LL total = query(x2+1,y2+1);
                LL small = query(x1+0,y1+0);
                LL s1 = query(x2+1,y1+0);
                LL s2 = query(x1+0,y2+1);
                printf("%lld
    ",((total+small-s1-s2)%MOD+MOD)%MOD);
            }
        }
        return 0;
    }
  • 相关阅读:
    嵌入式
    IT 管理
    linux 网络编程 排序
    linux frameBuffer
    虚拟现实
    vc 串口
    OpenGLES 图像
    runloop
    归档
    商标查询
  • 原文地址:https://www.cnblogs.com/redips-l/p/7668605.html
Copyright © 2011-2022 走看看