zoukankan      html  css  js  c++  java
  • BZOJ 1452 Count

    长知识啦。。二维BIT。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,m,q,t[105][305][305],map[305][305];
    int a,b,c,d,e,f;
    int lowbit(int x)
    {
        return x&(-x);
    }
    void update(int x,int y,int c,int val)
    {
        for (int i=x;i<=n;i+=lowbit(i))
            for (int j=y;j<=m;j+=lowbit(j))
                t[c][i][j]+=val;
    }
    int ask(int x,int y,int c)
    {
        int tmp=0;
        for (int i=x;i>=1;i-=lowbit(i))
            for (int j=y;j>=1;j-=lowbit(j))
                tmp+=t[c][i][j];
        return tmp;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
            {
                scanf("%d",&map[i][j]);
                update(i,j,map[i][j],1);
            }
        scanf("%d",&q);
        for (int i=1;i<=q;i++)
        {
            scanf("%d",&a);
            if (a==1) 
            {
                scanf("%d%d%d",&b,&c,&d);
                update(b,c,map[b][c],-1);
                update(b,c,d,1);
                map[b][c]=d;
            }
            else
            {
                scanf("%d%d%d%d%d",&b,&c,&d,&e,&f);
                int q1=0,q2=0,q3=0,q4=0;
                q1=ask(c,e,f);
                if (b>=2) q2=ask(b-1,e,f);
                if (d>=2) q3=ask(c,d-1,f);
                if ((b>=2) && (d>=2)) q4=ask(b-1,d-1,f);
                printf("%d
    ",q1-q2-q3+q4);
            }
        }
        return 0;
    }
  • 相关阅读:
    mysql 取出每科成绩前两名
    mysql 数据库以及sql 的优化
    Twitter开源分布式自增ID算法snowflake
    SVN 冲突
    VUE 入门 1 列表、if判断 、双向绑定
    Roadblock
    最大子序和
    SOLDIERS
    绿豆蛙的归宿
    Place the Robots
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5553262.html
Copyright © 2011-2022 走看看