poj1195(二维树状数组)

poj1195(二维树状数组)

题目链接:https://vjudge.net/problem/POJ-1195

题意:有s*s的矩阵,初始化为全0,有两种操作,单点修改(x,y)的值,区间查询(x,y)的值(l<=x<=r,b<=y<=t)。

思路:二维树状数组裸应用查询区间(l,b)~(r,t)的值可转换为tr[r][t]-tr[l-1][t]-tr[r][b-1]+tr[l-1][b-1]。要注意的是输入的x,y是从0开始的,所以要加1。

AC代码:  

#include<cstdio>
#include<cctype>
using namespace std;

inline int read(){
    int x=0,f=0;char c=0;
    while(!isdigit(c)){f|=c=='-';c=getchar();}
    while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    return f?-x:x;
}

int op,s,tr[1030][1030];

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

void update(int x,int y,int k){
    while(x<=s){
        int tmp=y;
        while(tmp<=s){
            tr[x][tmp]+=k;
            tmp+=lowbit(tmp);
        }
        x+=lowbit(x);
    }
}

int query(int x,int y){
    int ans=0;
    while(x>0){
        int tmp=y;
        while(tmp>0){
            ans+=tr[x][tmp];
            tmp-=lowbit(tmp);
        }
        x-=lowbit(x);
    }
    return ans;
}

int main(){
    op=read(),s=read();
    while(op=read(),op!=3){
        if(op==1){
            int x=read()+1,y=read()+1,k=read();
            update(x,y,k);
        }
        else{
            int l=read()+1,b=read()+1,r=read()+1,t=read()+1;
            printf("%d\n",query(r,t)-query(l-1,t)-query(r,b-1)+query(l-1,b-1));
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/FrankChen831X/p/10799465.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100945.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 不就是Java编程嘛,来来来

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开! …

    2022年2月28日
  • fisher最优分割法_a0裁切三次

    fisher最优分割法_a0裁切三次给定一个无向图 G=(V,E),每个顶点都有一个标号,它是一个 [0,231−1] 内的整数。不同的顶点可能会有相同的标号。对每条边 (u,v),我们定义其费用 cost(u,v) 为 u 的标号与 v 的标号的异或值。现在我们知道一些顶点的标号。你需要确定余下顶点的标号使得所有边的费用和尽可能小。输入格式第一行有两个整数 N,M,N 是图的点数,M 是图的边数。接下来有 M 行,每行有两个整数 u,v,代表一条连接 u,v 的边。接下来有一个整数 K,代表已知标号的顶点个数。接下来的 K

    2022年8月11日
  • dirsearch使用方法_查看es某个索引下的所有数据

    dirsearch使用方法_查看es某个索引下的所有数据下载地址:https://github.com/maurosoria/dirsearch要求安装并配置好:python3环境,python3环境,python3环境!!!使用方法,在cmd切换到安装目录pydirsearch.py-u网址-e语言(我一般用*)运行结果截图-u指定url-e指定网站语言例如pydirsearch.py-uwww.xxx.com…

    2022年10月6日
  • 简单令牌桶实现

    简单令牌桶实现主要思路:1.创建channel,通过定时器定时往channel中写入令牌,返回令牌桶本身(channel);2.判断请求是否可以拿到令牌;packagemainimport(&quot

    2022年7月2日
  • pipenv是什么_pipenv安装失败

    pipenv是什么_pipenv安装失败pipenv发布于2017年1月,它是一种Python依赖管理工具,你可以把它看做是pip和virtualenv的组合体,pipenv可以帮你管理虚拟环境和依赖文件,并且提供一系列命令和选项来帮助你实

    2022年8月6日
  • 矩阵分析 (二) 内积空间「建议收藏」

    矩阵分析 (二) 内积空间「建议收藏」内积空间的基本概念定义2.1:设VVV是实数域PPP上的线性空间,如果对于VVV中任意两个元素α\alphaα,β\betaβ都有一个实数(α,β)(\alpha,\beta)(α,β)与它们对应,并且满足下面的四个条件,则(α,β)(\alpha,\beta)(α,β)称为元素α\alphaα,β\betaβ的内积:1):对于任意的α,β\alpha,\betaα,β:(α,β)=(β…

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号