zoukankan      html  css  js  c++  java
  • 【二维树状数组】bzoj1452 [JSOI2009]Count

    权值的种类只有100种,对每种开个二维BIT,然后是经典操作。

     1 #include<cstdio>
     2 using namespace std;
     3 int n,m,q,x1,y1,x2,y2,val,op,a[301][301];
     4 struct BIT_2D
     5 {
     6     int d[301][301];
     7     void update(int x,const int &y,const int &V)
     8       {
     9         for(;x<=n;x+=(x&(-x)))
    10           for(int j=y;j<=n;j+=(j&(-j)))
    11             d[x][j]+=V;
    12       }
    13     int getsum(int x,const int &y)
    14       {
    15         int res=0;
    16         for(;x;x-=(x&(-x)))
    17           for(int j=y;j;j-=(j&(-j)))
    18             res+=d[x][j];
    19         return res;
    20       }
    21 }T[101];
    22 int main()
    23 {
    24     scanf("%d%d",&n,&m);
    25     for(int i=1;i<=n;++i)
    26       for(int j=1;j<=m;++j)
    27         {
    28           scanf("%d",&a[i][j]);
    29           T[a[i][j]].update(i,j,1);
    30         } scanf("%d",&q);
    31     for(;q>0;--q)
    32       {
    33           scanf("%d",&op);
    34           if(op==1)
    35             {
    36                 scanf("%d%d%d",&x1,&y1,&val);
    37                 T[a[x1][y1]].update(x1,y1,-1);
    38                 T[a[x1][y1]=val].update(x1,y1,1);
    39             }
    40           else
    41             {
    42                 scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&val);
    43                 int t1=T[val].getsum(x2,y2);
    44                 int t2=T[val].getsum(x1-1,y2);
    45                 int t3=T[val].getsum(x2,y1-1);
    46                 int t4=T[val].getsum(x1-1,y1-1);
    47                 printf("%d
    ",t1-t2-t3+t4);
    48             }
    49       }
    50     return 0;
    51 }
  • 相关阅读:
    Matlab norm 用法小记
    C51存储器类型 MCS51单片机物理存储器区域
    MATLAB 中NORM运用
    Matlab norm 用法小记
    C51存储器类型 MCS51单片机物理存储器区域
    MATLAB 中NORM运用
    poj2031
    poj1039
    poj3122
    poj3980
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4121404.html
Copyright © 2011-2022 走看看