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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux Vi 文本编辑器常用命令

    Linux Vi 文本编辑器常用命令*LinuxVi文本编辑器常用命令**引言:在Linux中我们常用的文本编辑器有Vi,Vim(Vi的增强版)。而且vi编辑器不仅仅是适用于Linux,它是所有Unix以及Linux系统下的标准编辑器,几乎适用于Unix、Linux系统的所有版本。vi或vim虽然没有Windows操作系统中的图形界面编辑器那样点鼠标的简单操作,但vi编辑器在系统管理、服务器管理字符界面中,永远不是图形界面的编辑器能比的。它能轻易地创建和修改文本文件,维护Linux系统中的配置文件。其实刚开始的时候我也觉得很不习…

    2022年7月26日
    3
  • 好用的php空间,推荐国内三个优质的免费PHP空间[通俗易懂]

    1.亿家免费国内PHP空间这是我见过最好的免费国内PHP空间了,这个BLOG就是由他的空间支撑的,所以你看到我这个空间的稳定,快速就代表着他们空间的优质了,推荐注册地址:www.e9china.net这个先要在他们论坛上发帖子,当你在论坛里的号升级后,就可以到相应版块去提交申请免费国内PHP空间了,具体多少级我记不得了,现在论坛改版本了,我都成新手上路了···这个免费国内PHP空间你得到后,不需要…

    2022年4月18日
    70
  • 返回顶部的几种方法总结

    返回顶部的几种方法总结返回顶部的几种方法总结

    2022年7月4日
    21
  • git拉取代码密码错误_idea提交git

    git拉取代码密码错误_idea提交gitgit提交代码1:一定要先pull,(在本地建立仓库)eclipse中点击file找到term中的pull,同步拉取远程代码,idea中tomcat旁边斜向下箭头,拉取,首次拉取要输入用户名密码,2:提交到本地仓库commit,并填写提交备注,方便查找,3:push推送远程分支,提交到git分支。常见的pull失败:冲突-多个人修改同一个文件,别人修改后自己也修改导致拉取失败,解决冲突…

    2022年10月21日
    0
  • fullcalendar日历控件知识点集合

    fullcalendar日历控件知识点集合

    2021年12月7日
    41
  • web添加图片的代码_html保存图片到本地

    web添加图片的代码_html保存图片到本地其实很简单,格式如下:<imgsrc=”data:image/jpg;base64,具体的编码值”/>支持的类型有:data:,文本数据data:text/plain,文本数据data:text/css,CSS代码data:text/css;base64,base64编码的CSS代码data:text/javascript,Javas…

    2022年10月19日
    0

发表回复

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

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