zoukankan      html  css  js  c++  java
  • hdu2642二维树状数组单点更新

    碰到这种题一定要注意坐标是不是有序的,也要注意坐标是不是有0的,有的话需要+1处理

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 1005
    int bit[maxn][maxn],flag[maxn][maxn]; 
    char op[5];
    void add(int x,int y,int num){
        for(int i=x;i<=1002;i+=i&-i)
            for(int j=y;j<=1002;j+=j&-j)
                bit[i][j]+=num;
    }    
    int query(int x,int y){
        int res=0;
        for(int i=x;i;i-=i&-i)
            for(int j=y;j;j-=j&-j)
                res+=bit[i][j];
        return res;
    }    
    int main(){
        int m,x1,y1,x2,y2;
        while(scanf("%d",&m)==1){
            memset(bit,0,sizeof bit);
            memset(flag,0,sizeof flag);
            while(m--){
                scanf("%s",op);
                if(op[0]=='B'){
                    scanf("%d%d",&x1,&y1);
                    x1++,y1++;
                    if(flag[x1][y1]) continue;
                    add(x1,y1,1);
                    flag[x1][y1]=1;
                }
                else if(op[0]=='D'){
                    scanf("%d%d",&x1,&y1);    
                    x1++,y1++;
                    if(flag[x1][y1]==0) continue;
                    add(x1,y1,-1);
                    flag[x1][y1]=0;
                }
                else {
                    scanf("%d%d%d%d",&x1,&x2,&y1,&y2);
                    x1++,y1++,x2++,y2++;
                    if(x1>x2) swap(x1,x2);
                    if(y1>y2) swap(y1,y2);
                    printf("%d
    ",query(x2,y2)-query(x1-1,y2)-query(x2,y1-1)+query(x1-1,y1-1));
                }
            }
        }
        return 0;
    }    
  • 相关阅读:
    对《应试教育》有感
    月总结
    有趣的生活,有趣的比赛
    H5之js拼接select级联优化
    H5之js拼接select与input的级联
    OA-分页查询(抽象最终版)二
    OA-分页查询(抽象最终版)一
    今目标反思
    电子商务运作的随想
    旅游票务网站
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10101419.html
Copyright © 2011-2022 走看看