zoukankan      html  css  js  c++  java
  • bzoj1452: [JSOI2009]Count

    2维bit。每个颜色建一个。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn = 300+10;
    
    struct Bit2D {
        int a[maxn][maxn],n,m;
        inline int lowbit(int x) {
            return x&-x;
        }
        
        void add(int x,int y,int d) {
            for(int i=x;i<=n;i+=lowbit(i))
            for(int j=y;j<=m;j+=lowbit(j))
                a[i][j]+=d;
        }
        
        int query(int x,int y) {
            int res =0;
            for(int i=x;i;i-=lowbit(i))
            for(int j=y;j;j-=lowbit(j)) 
                res+=a[i][j];
            return res;
        }
        
        int query2(int x1,int x2,int y1,int y2) {
            int res=query(x2,y2)+query(x1-1,y1-1)-query(x1-1,y2)-query(x2,y1-1);
            return res;
        }
        
        void build(int a,int b) {
            n=a; m=b;
        }
    } bit[110];
    
    int a[maxn][maxn];
    
    void op1() {
        int x,y,c;
        scanf("%d%d%d",&x,&y,&c);
        bit[a[x][y]].add(x,y,-1);
        bit[c].add(x,y,1);
        a[x][y]=c;
    }
    
    void op2() {
        int x1,x2,y1,y2,c;
        scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c);
        printf("%d
    ",bit[c].query2(x1,x2,y1,y2));
    }
    
    int main() {
      int n,m,q;
      scanf("%d%d",&n,&m);
      for(int i=1;i<=100;i++) bit[i].build(n,m);
      for(int i=1;i<=n;i++) 
      for(int j=1;j<=m;j++) {
          scanf("%d",&a[i][j]);
          bit[a[i][j]].add(i,j,1);
      }
      scanf("%d",&q);
      for(int i=1,op;i<=q;i++) {
          scanf("%d",&op);
          if(op==1) op1();
          else op2();
      }
      return 0;
    }
  • 相关阅读:
    mongodb笔记一
    mysql的备份和恢复
    explain的type列
    Debian下apache2设置并发
    nginx基本调优
    c语言struct
    Centos 安装nginx + php + mysql
    Debian下系统启动时执行脚本
    centos5.5服务器基本篇
    分治法
  • 原文地址:https://www.cnblogs.com/invoid/p/5433160.html
Copyright © 2011-2022 走看看