• 【洛谷P4514】上帝造题的七分钟【二维树状数组】


    题目大意:

    题目链接:https://www.luogu.org/problem/P4514
    给出一个n×mn imes m的矩阵,维护矩阵区域加法以及查询的操作。


    思路:

    二维树状数组的模板题。二维树状数组在这里就不介绍了,想要学习的可以戳 这篇题解
    时间复杂度是两个loglog的。


    代码:

    #include <cstdio>
    #include <string>
    using namespace std;
    
    const int N=2100;
    int n,m,x1,y1,x2,y2,k;
    char ch[2];
    
    int read()
    {
    	int d=0,f=1; char Ch=getchar();
    	while (!isdigit(Ch))
    	{
    		if (Ch=='-') f=-1;
    		Ch=getchar();
    	}
    	while (isdigit(Ch))	
    		d=(d<<3)+(d<<1)+Ch-48,Ch=getchar();
    	return d*f;
    }
    
    struct BIT
    {
    	int c[N][N];
    	
    	int lowbit(int x)
    	{
    		return x&-x;
    	}
    	
    	void add(int x,int y,int val)
    	{
    		if (!x || !y) return;
    		for (int i=x;i<=n;i+=lowbit(i))
    			for (int j=y;j<=m;j+=lowbit(j))
    				c[i][j]+=val;
    	}
    	
    	int ask(int x,int y)
    	{
    		if (!x || !y) return 0;
    		int ans=0;
    		for (int i=x;i;i-=lowbit(i))
    			for (int j=y;j;j-=lowbit(j))
    				ans+=c[i][j];
    		return ans;
    	}
    }bit[5];
    
    void add(int x,int y,int val)
    {
    	bit[1].add(x,y,val);
    	bit[2].add(x,y,val*x);
    	bit[3].add(x,y,val*y);
    	bit[4].add(x,y,val*x*y);
    }
    
    int ask(int x,int y)
    {
    	return bit[1].ask(x,y)*(x*y+x+y+1)-bit[2].ask(x,y)*(y+1)-bit[3].ask(x,y)*(x+1)+bit[4].ask(x,y);
    }
    
    int main()
    {
    	scanf("%s",ch+1);
    	n=read(); m=read();
    	while (scanf("%s",ch+1)==1)
    	{
    		if (ch[1]=='L')
    		{
    			x1=read(); y1=read(); x2=read(); y2=read(); k=read();
    			add(x2+1,y2+1,k); add(x1,y1,k);
    			add(x1,y2+1,-k); add(x2+1,y1,-k);
    		}
    		else
    		{
    			x1=read(); y1=read(); x2=read(); y2=read();
    			printf("%d
    ",ask(x2,y2)-ask(x1-1,y2)-ask(x2,y1-1)+ask(x1-1,y1-1));
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    Linux
    Linux -- 文件统计常用命令
    再论最小二乘
    再论EM算法的收敛性和K-Means的收敛性
    【MySQL】优化—工欲善其事,必先利其器之EXPLAIN
    【Linux】浅谈段页式内存管理
    【Linux】之系统工具top
    【Linux】之shell特殊变量整理
    【Linux】系统 之 RAID
    【MySQL】binlog缓存的问题和性能
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998040.html
Copyright © 2020-2023  润新知