题目大意
二维树状数组板子
思路
板子要什么思路
#include<cctype>
#include<cerrno>
#include<cfloat>
#include<ciso646>
#include<climits>
#include<clocale>
#include<cmath>
#include<csetjmp>
#include<csignal>
#include<cstdarg>
#include<cstddef>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cassert>
#include<cwchar>
#include<cwctype>
#include<algorithm>
#include<bitset>
#include<complex>
#include<deque>
#include<exception>
#include<fstream>
#include<functional>
#include<iomanip>
#include<ios>
#include<iosfwd>
#include<iostream>
#include<istream>
#include<iterator>
#include<limits>
#include<list>
#include<locale>
#include<map>
#include<memory>
#include<new>
#include<numeric>
#include<ostream>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<stdexcept>
#include<streambuf>
#include<string>
#include<typeinfo>
#include<utility>
#include<valarray>
#include<vector>
using namespace std;
long long n,m,Quant,Ask,quant,ask,XJQ;
struct f{
long long AK[(1<<12)+10][(1<<12)+10];
void add(long long x,long long y,long long WJ)
{
while (x<=n)
{
long long y2=y;
while (y2<=m)
{
AK[x][y2]+=WJ;
y2+=y2&-y2;
}
x+=x&-x;
}
return;
}
long long QuantAsk(long long x,long long y)
{
long long ans=0;
while (x)
{
long long y2=y;
while (y2)
{
ans+=AK[x][y2];
y2-=y2&-y2;
}
x-=x&-x;
}
return ans;
}
} wj;
long long t;
int main()
{
scanf("%lld %lld",&n,&m);
while (~scanf("%lld",&t))
{
if (t==1)
{
scanf("%lld %lld %lld",&Quant,&Ask,&XJQ);
wj.add(Quant,Ask,XJQ);
}
else
{
scanf("%lld %lld %lld %lld",&Quant,&Ask,&quant,&ask);
Quant--,Ask--;
printf("%lld\n",wj.QuantAsk(quant,ask)-wj.QuantAsk(Quant,ask)-wj.QuantAsk(quant,Ask)+wj.QuantAsk(Quant,Ask));
}
}
return 0;
}
// cout<<"stoorz AK IOI every day!!!";