题目链接:点击打开链接
知识点:点击打开链接
题意:
输入指令n
n=0 输入s,将s*s的矩阵清零
n=1 输入X,Y,A,将(X,Y)这个方格对应的值加上A
n=2 输入L,B,R,T,求L<=i<=R,B<=j<=T范围内的矩阵的数值和
n=3 结束
模板题
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int a[1026][1026];
int lowbit[1026];
int s;
void Modify(int x,int y,int data)
{
for(int i=x;i<=s;i+=lowbit[i])
{
for(int j=y;j<=s;j+=lowbit[j])
{
a[i][j]+=data;
}
}
}
int sum(int x,int y)
{
int result =0;
for(int i=x;i>0;i-=lowbit[i])
{
for(int j=y;j>0;j-=lowbit[j])
{
result+=a[i][j];
}
}
return result;
}
int main()
{
int n;
for(int i=1;i<1026;i++)
{
lowbit[i] = i&(-i);
}
while(1)
{
scanf("%d",&n);
if(n==0)
{
scanf("%d",&s);
for(int i=0;i<=s;i++)
{
for(int j=0;j<=s;j++)
{
a[i][j]=0;
}
}
continue;
}
if(n==1)
{
int X,Y,A;
scanf("%d%d%d",&X,&Y,&A);
Modify(X+1,Y+1,A);
continue;
}
if(n==2)
{
int L,B,R,T;
scanf("%d%d%d%d",&L,&B,&R,&T);
L++,B++,R++,T++;
printf("%d\n",sum(R,T)-sum(L-1,T)-sum(R,B-1)+sum(L-1,B-1));
continue;
}
if(n==3) break;
}
return 0;
}