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)
上一篇 2021年7月6日 上午10:00
下一篇 2021年7月6日 上午11:00


相关推荐

  • 实型变量的定义和应用

    实型变量的定义和应用includeintma floatx doubley x 789 y 789 printf x f n x printf y f n y 输出 x y 分析 nbsp nbsp nbsp nbsp 从程序运行结果可以看出 x 的值并不等于赋予的初值 而 y 的值等于赋予的

    2026年3月16日
    3
  • 音频编辑大师 3.3 注册名称 许可证

    音频编辑大师 3.3 注册名称 许可证

    2021年12月31日
    45
  • ForkJoin 线程池[通俗易懂]

    ForkJoin 线程池[通俗易懂]一、分而治之严格来讲,分而治之不算一种模式,而是一种思想。它可以将一个大任务拆解为若干个小任务并行执行,提高系统吞吐量。主要讲两个场景,Master-Worker模式,ForkJoin线程池。ForkJoin线程池是jdk7之后引入的一个并行执行任务的框架,其核心思想也是将任务分割为子任务,有可能子任务还是很大,还需要进一步拆解,最终得到足够小的任务。将分割出来的子任务放入双端队列中,然后几个启动线程从双端队列中获取任务执行。子任务执行的结果放到一个队列里,另起线程从队列中获取数据,合并结果。

    2026年1月29日
    4
  • 一文搞懂JVM内存结构

    一文搞懂JVM内存结构1.前言Java虚拟机是中、高级开发人员必须修炼的知识,有着较高的学习门槛,很多人都不情愿去接触它。可能是觉得学习成本较高又或者是感觉没什么实用性,所以干脆懒得“搭理”它了。其实这种想法是错误的。举个最简单的例子,JVM基本上是每家招聘公司都会问到的问题,它们会这么无聊问这些不切实际的问题吗?很显然不是。由JVM引发的故障问题,无论在我们开发过程中还是生产环境下都是非常常见的。比如…

    2022年6月14日
    37
  • 「建议收藏」Pycharm使用教程(非常详细,非常实用)「建议收藏」

    「建议收藏」Pycharm使用教程(非常详细,非常实用)「建议收藏」Pycharm使用教程1、Jetbrains家族和Pycharm版本划分:pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJIDEA)、JavaScript编辑器(WebStorm)、PHP编辑器(PHPStorm)、Ruby编辑器(RubyMine)、C和C++编辑器(CLion)、.Net编辑器(Rider)、iOS/macOS编辑器(AppCode)等。pycharm现在在官网[https://www.jetb

    2022年8月25日
    7
  • 网站测速源码_域名检测工具

    网站测速源码_域名检测工具简介:网址发布页模板,带网址测和域名检测功能,虽然是假的,但是也很有逼格。网盘下载地址:http://kekewl.net/D0Ef4yBuoyy0图片:

    2022年8月31日
    4

发表回复

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

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