zoukankan      html  css  js  c++  java
  • [bzoj 1452] [JSOI2009]Count

    [bzoj 1452] [JSOI2009]Count

    Description

    Input

    Output

    Sample Input

    Sample Output

    1
    2
    

    HINT

    二维树状数组裸题,建立多个树状数组去维护每一种颜色就可以了.

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    static const int maxm=3e2+10;
    static const int maxn=1e2+10;
    
    int n,m,k,opt;
    int v[maxm][maxm];
    
    struct BIT{
    	int tr[maxm][maxm];
    	BIT(){memset(tr,0,sizeof tr);}
    	
    	int lowbit(int x){
    		return x&-x;
    	}
    	
    	int add(int x,int y,int val){
    		for(int i=x;i<=n;i+=lowbit(i))
    			for(int j=y;j<=m;j+=lowbit(j))
    				tr[i][j]+=val;
    	}
    	
    	int Query(int x,int y){
    		int ret=0;
    		for(int i=x;i;i-=lowbit(i))
    			for(int j=y;j;j-=lowbit(j))
    				ret+=tr[i][j];
    		return ret;
    	}
    	
    	int solve(int x1,int y1,int x2,int y2){
    		return Query(x2,y2)-Query(x2,y1-1)-Query(x1-1,y2)+Query(x1-1,y1-1);
    	}
    	
    }bit[maxn];
    
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			scanf("%d",&v[i][j]),bit[v[i][j]].add(i,j,1);
    	
    	scanf("%d",&k);
    	
    	while(k--){
    		int x,y,c,x1,y1,x2,y2;
    		scanf("%d",&opt);
    		if(opt==1){
    			scanf("%d%d%d",&x,&y,&c);
    			bit[v[x][y]].add(x,y,-1);
    			v[x][y]=c;
    			bit[v[x][y]].add(x,y,1);
    		}else{
    			scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c);
    			printf("%d
    ",bit[c].solve(x1,y1,x2,y2));
    		}
    	}
    
    	return 0;
    }
    

    传送门

  • 相关阅读:
    1113. Integer Set Partition (25)
    1110. Complete Binary Tree (25)
    1109. Group Photo (25)
    Bender Problem
    格子中输出
    牌型种数
    移动距离
    QQ帐户的申请与登陆(25 分)
    词频统计
    基于HTTP的直播点播HLS
  • 原文地址:https://www.cnblogs.com/Exbilar/p/6852436.html
Copyright © 2011-2022 走看看