zoukankan      html  css  js  c++  java
  • [BZOJ1452/Luogu4054][JSOI2009]Count计数问题

    题目链接:

    BZOJ1452

    Luogu4054

    二维树状数组题(或许可以毒瘤树套树

    注意到值域范围为(100),对每个数开一个二维树状数组,在对应的树状数组上修改查询即可。

    时间复杂度 (O(Qlognlogm))

    空间复杂度 (O(nmc))

    代码:

    #include <cstdio>
    
    int n,m,q,a[305][305];
    struct Binary_Indexed_Tree
    {
    	int c[305][305];
    	
    	inline void Modify(int x,int ys,int v)
    	{
    		for(;x<=n;x+=x&-x)
    			for(int y=ys;y<=m;y+=y&-y)
    				c[x][y]+=v;
    	}
    	
    	inline int Query(int x,int ys)
    	{
    		int Res=0;
    		for(;x;x^=x&-x)
    			for(int y=ys;y;y^=y&-y)
    				Res+=c[x][y];
    		return Res;
    	}
    }Bit[105];
    
    int main()
    {
    	scanf("%d%d",&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]].Modify(i,j,1);
    		}
    	scanf("%d",&q);
    	for(int op,x,y,xs,ys,c;q--;)
    		if(scanf("%d",&op),op==1)
    		{
    			scanf("%d%d%d",&x,&y,&c);
    			Bit[a[x][y]].Modify(x,y,-1);
    			Bit[a[x][y]=c].Modify(x,y,1);
    		}
    		else
    		{
    			scanf("%d%d%d%d%d",&x,&xs,&y,&ys,&c);
    			int r1=Bit[c].Query(xs,ys);
    			int r2=Bit[c].Query(xs,y-1);
    			int r3=Bit[c].Query(x-1,ys);
    			int r4=Bit[c].Query(x-1,y-1);
    			printf("%d
    ",r1-r2-r3+r4);
    		}
    	return 0;
    }
    
  • 相关阅读:
    图片音乐 上传、下载
    表格类型数据,Excel csv导入,导出操作
    逐行读取txt文件,分割,写入txt。。。上传,下载
    性能分析四
    性能分析三
    postman断言
    postman+Newman语法参数
    shell_03
    shell_02
    shell_01
  • 原文地址:https://www.cnblogs.com/LanrTabe/p/10450969.html
Copyright © 2011-2022 走看看