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;
    }
  • 相关阅读:
    [原创]ASP.NET MVC调用美图秀秀开放平台拼图实现
    使用Lucene检索文档中的关键字
    Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误
    初探IronJS
    IntelliJ IDEA 12 创建Web项目 教程 超详细版
    百度面试题:求绝对值最小的数
    jquery+css实现简单的评分功能
    Knockot JS 数字输入插件
    Diagnostic Policy Service 服务处于起不来
    WCF学习笔记(一) 之 开门见山
  • 原文地址:https://www.cnblogs.com/redips-l/p/7668605.html
Copyright © 2011-2022 走看看