【树转数组】poj1195
/*
二维的树状数组:
更新某个元素时:
NO.1:c[n1],c[n2],c[n3],....,c[nm];
当中n1 = i,n(i+1) = ni+lowbit(ni);
nm+lowbit(nm)的值应该大于元素个数N。
NO.2:sum(k)=c[n1]+c[n2]+...+c[nm];
当中nm=k,n(i-1)=ni-lowbit(ni);
n1-lowbit(n1)的值应该小于0
----------------------------------------------------------------------
用二维的c[i][j]存储长条的和。。。、
---------------------------------------
元素的值加一个数:
void update(int x, int y, int a)
{
for(int i=x; i<=s; i+=lowbit(i))
{
for(int j=y; j<=s; j+=lowbit(j))
c[i][j] += a;
}
}
---------------------------------------------------
int sum(int x, int y)矩阵0到x和0到y的元素和
{
int ret = 0;
for(int i=x; i>0; i-=lowbit(i))
{
for(int j=y; j>0; j-=lowbit(j))
ret += c[i][j];
}
return ret;
}
------------------------------------------------
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f using namespace std; int op,s;
int x,y,a;
int l,b,r,t;
int c[1050][1050]; int lowbit(int x)
{
return x & (-x);
} void update(int x, int y, int a)
{
for(int i=x; i<=s; i+=lowbit(i))
{
for(int j=y; j<=s; j+=lowbit(j))
c[i][j] += a;
}
} int sum(int x, int y)
{
int ret = 0;
for(int i=x; i>0; i-=lowbit(i))
{
for(int j=y; j>0; j-=lowbit(j))
ret += c[i][j];
}
return ret;
} int main()
{
//freopen("input.txt","r",stdin);
while(1)
{
scanf("%d",&op);
if(op == 0)
{
scanf("%d",&s);
memset(c, 0, sizeof(c));
}
if(op == 1)
{
scanf("%d%d%d",&x,&y,&a);
update(x+1, y+1, a);
}
if(op == 2)
{
scanf("%d%d%d%d",&l, &b,&r,&t);
l++;
b++;
r++;
t++;
printf("%d\n",sum(r, t) - sum(r, b-1) - sum(l-1, t) + sum(l-1, b-1) );
}
if(op == 3)
return 0;
}
}
----------------------------------
快。。。。。
【树转数组】poj1195的更多相关文章
- 二维树状数组poj1195
题目链接:https://vjudge.net/problem/POJ-1195 题意:一开始输入0和一个s,0代表开始,s代表这是一个s*s的图,接下来会输入1或2,1代表进行单点修改,后面会接3个 ...
- poj1195(二维树状数组)
题目链接:https://vjudge.net/problem/POJ-1195 题意:有s*s的矩阵,初始化为全0,有两种操作,单点修改(x,y)的值,区间查询(x,y)的值(l<=x< ...
- POJ-1195 Mobile phones---裸的二维树状数组(注意下标从1,1开始)
题目链接: https://vjudge.net/problem/POJ-1195 题目大意: 直接维护二维树状数组 注意横纵坐标全部需要加1,因为树状数组从(1,1)开始 #include<c ...
- 二维树状数组(水题) POJ1195
前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用 ...
- 【POJ1195】【二维树状数组】Mobile phones
Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...
- poj1195二维树状数组模板
二维树状数组和一维的也差不多,改一下add和query函数即可:即按行修改,行内单点修改即可 /* 二维树状数组,询问一个二维区间内的数之和 */ #include<iostream> # ...
- poj-1195(二维树状数组)
题目链接:传送门 题意:给出操作,按照操作进行. 思路:将树状数组设置为二维的就行了. 注意: (1)每次求出的面积是S(x2,y2)-S(x1-1,y2)-S(x2,y1-1)+S(x1-1,y1- ...
- 【poj1195】Mobile phones(二维树状数组)
题目链接:http://poj.org/problem?id=1195 [题意] 给出一个全0的矩阵,然后一些操作 0 S:初始化矩阵,维数是S*S,值全为0,这个操作只有最开始出现一次 1 X Y ...
- POJ1195(二维树状数组)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 17176 Accepted: 7920 De ...
随机推荐
- 3D 应用程序性能
原文:3D 应用程序性能 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/74595999 3 ...
- linux的任务计划 定时任务 计划任务
例如要定时访问一个指定的url 先看看系统有没有crontab
- fortran 函数的调用标准
Fortran函数的调用标准在编译时使用iface声明.如iface:default.表示採用的是default标准. fortran的调用标准有 [1] default: Tells the com ...
- jdbc之二:DAO模式 分类: B1_JAVA 2014-04-29 15:13 1536人阅读 评论(0) 收藏
详细代码请参见 https://github.com/lujinhong/dao 一.前期准备 1.创建数据库 create database filter_conf; 2.创建表并插入数据 crea ...
- Java并发包探秘 (一) ConcurrentLinkedQueue
本文是Java并发包探秘的第一篇,旨在介绍一下Java并发容器中用的一些思路和技巧,帮助大家更好的理解Java并发容器,让我们更好的使用并发容器打造更高效的程序.本人能力有限,错误难免.希望及时指出. ...
- [Angular Unit Testing] Shallow Pipe Testing
import { TestBed, ComponentFixture } from '@angular/core/testing'; import { BrowserDynamicTestingMod ...
- [Angular Testing] Unit Testing -- Test component and service.
Recommend to use angular-cli to generate component and service, so we can get testing templates. ng ...
- PHP接口类interface使用方法
PHP同大多数的面向对象语言一样,并不支持多重继承.少数支持多重继承的语言中最著名的就是C++和Smalltalk.如果需要实现多重继承功能,在PHP中,可以通过接口,它是PHP解决多重继承问题的方法 ...
- vi/vim基本使用命令
vi/vim基本使用命令 一.总结 一句话总结:1.记住三种模式:命令行模式.插入模式.底行模式:2.记住两个按键功能:i和esc 二.vi/vim基本使用命令 vi/vim 基本使用方法本文介绍了v ...
- php数学和时间常用函数有哪些(总结表)(看学习视频效率挺高的)(复习)
php数学和时间常用函数有哪些(总结表)(看学习视频效率挺高的)(复习) 一.总结 一句话总结: 1.数学函数常用的6个:max().min().cell().floor().round().mt_r ...