VIJOS 1512SuperBrother打鼹鼠(二维BIT)

呵呵..

二维树状数组,第二维和第一维基本一样.

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

#include<cstdio>

#include<cstring>

#include<cstring>

#include<algorithm>

#define rep(i, n) for(int i = 0; i < n; ++i)

#define Rep(i, r) for(int i = 1; i <= r; ++i)

#define clr(x, c) memset(x, c, sizeof(x))

using namespace std;

const int maxn = 1024 + 5;

int n, b[maxn][maxn];

#define lowbit(x) (x & -x)

void add(int x, int y, int v) {

for(int i = x; i <= n; i += lowbit(i))

for(int j = y; j <= n; j += lowbit(j))

b[i][j] += v;

}

int sum(int x, int y) {

int ans = 0;

for(int i = x; i > 0; i -= lowbit(i))

for(int j = y; j > 0; j -= lowbit(j))

ans += b[i][j];

return ans;

}

int main() {

freopen("test.in", "r", stdin);

clr(b, 0);

scanf("%d", &n);

int op;

while(scanf("%d", &op) == 1 && op != 3) {

if(op == 1) {

int x, y, v;

scanf("%d%d%d", &x, &y, &v);

++x; ++y;

add(x, y, v);

} else {

int x[2], y[2];

rep(i, 2) scanf("%d%d", &x[i], &y[i]);

printf("%d\n", sum(x[1] + 1, y[1] + 1) - sum(x[0], y[1] + 1) - sum(x[1] + 1, y[0]) + sum(x[0], y[0]));

}

}

return 0;

}

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

P1512SuperBrother打鼹鼠

Accepted

标签:[显示标签]

背景

SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩“打鼹鼠”......

描述

在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……)。洞口都在一个大小为n(n<=1024)的正方形中。这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1)。洞口所在的位置都是整点,就是横纵坐标都为整数的点。而SuperBrother也不时地会想知道某一个范围的鼹鼠总数。这就是你的任务。

格式

输入格式

每个输入文件有多行。

第一行,一个数n,表示鼹鼠的范围。

以后每一行开头都有一个数m,表示不同的操作:
m=1,那么后面跟着3个数x,y,k(0<=x,y<n),表示在点(x,y)处新出现了k只鼹鼠;
m=2,那么后面跟着4个数x1,y1,x2,y2(0<=x1<=x2<n,0<=y1<=y2<n),表示询问矩形(x1,y1)-(x2,y2)内的鼹鼠数量;
m=3,表示老师来了,不能玩了。保证这个数会在输入的最后一行。

询问数不会超过10000,鼹鼠数不会超过maxlongint。

输出格式

对于每个m=2,输出一行数,这行数只有一个数,即所询问的区域内鼹鼠的个数。

样例1

样例输入1[复制]

4 1 2 2 5 2 0 0 2 3 3

样例输出1[复制]

5

限制

各个测试点1s

提示

水题一道。

所有数据均为随机生成,包括样例

时间: 2024-10-19 18:58:18

VIJOS 1512SuperBrother打鼹鼠(二维BIT)的相关文章

二维树状数组复习—— SuperBrother打鼹鼠

在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n< =1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务. 输入 每个输入文件有多行. 第一行,一个数n,表示鼹鼠的范围. 以后每一行开头都有一个数m,表示不同的操作: m=1,那么后面跟着3个数x,y

二维树状数组——SuperBrother打鼹鼠(Vijos1512)

树状数组(BIT)是一个查询和修改复杂度都为log(n)的数据结构,主要用于查询任意两位之间的所有元素之和,其编程简单,很容易被实现.而且可以很容易地扩展到二维.让我们来看一道很裸的二维树状数组题: 在一个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother

YBT1540打鼹鼠_二维树状数组

1540:打鼹鼠_二维树状数组 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 这是一道模板题. 给出一个 n×m 的零矩阵 A,你需要完成如下操作: 1 x y k:表示元素 Ax,y自增 k: 2 a b c d:表示询问左上角为 (a,b),右下角为 (c,d) 的子矩阵内所有数的和. [输入] 输入的第一行有两个正整数 n,m: 接下来若干行,每行一个操作,直到文件结束. [输出] 对于每个 2 操作,输出一个整数,表示对于这个操作的回答. [输

二维码扫码积分系统定制开发

微信积分系统 二维码扫码积分系统定制开发找丽姐[158.1816.6626/电微]二维码营销模式系统定制开发 微信扫二维码营销系统开发 扫码领积分系统开发 一.如何实现扫二维码领红包功能? 1.使用扫描二维码领取红包对活动进行设置,包括红包数量.红包金额.促销地区.中奖概率等. 2.将生成的二维码赋到商品上面并赋涂层,一方面可以起到保证二维码的一次性,另一方面也可以引起消费者的好奇心. 3.通过手机微信打开扫一扫,扫码商品二维码关注公众号并领取红包,如果参与分享还可以获得抽奖的机会. 二.微信扫

微信生成二维码 只需一个网址即刻 还有jquery生成二维码

<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text=http://123.net/index.php?s=/Home/Index/yanzheng/mai/{$dange.id}" style="width: 5rem; margin-bottom: 1rem;" > </div> http://qr.tops

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"

微信小程序(4)--二维码窗口

微信小程序二维码窗口: <view class="btn" bindtap="powerDrawer" data-statu="open">button</view> <!--mask--> <view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if=&qu

微信服务器与项目服务器的交互(关注功能、微信扫描带参数二维码)

<?php /** * wechat php test */ //define your token define("TOKEN", "txtj"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallback

14-高效求最长公共子序列(二维数组存不下)

/*                                   See LCS again时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 There are A, B two sequences, the number of elements in the sequence is n.m; Each element in the sequence are different and less than 100000. Calculate the length