zoukankan      html  css  js  c++  java
  • 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
    ",query(r,t)-query(l-1,t)-query(r,b-1)+query(l-1,b-1));
            }
        }
        return 0;
    }
  • 相关阅读:
    浏览器驱动
    django中的cookie和session
    django自定义中间件实现登陆
    django虚拟环境与文件上传
    了解和熟悉数据库相关知识
    JMeter ---相关脚本笔记
    JMeter脚本---关于时间戳的处理笔记
    JMeter中的读取json数据---JSON Extractor插件
    更多API知识学习
    认识VIM编辑器
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10799465.html
Copyright © 2011-2022 走看看