[bzoj 1452] Count (树状数组)
2017-05-25 11:48
351 查看
传送门
题目描述
输入
输出
样例输入
样例输出
1
2
提示
思路
因为权值最大为100 所以对于每一种权值建一个树状数组
然后维护和查询就不多说了
(PS:输出千万别用cout 我RE了10次 改printf就A了!! QwQ)
题目描述
输入
输出
样例输入
样例输出
1
2
提示
思路
因为权值最大为100 所以对于每一种权值建一个树状数组
然后维护和查询就不多说了
(PS:输出千万别用cout 我RE了10次 改printf就A了!! QwQ)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,q; int a[305][305]; int t[105][305][305];//每一个权值建立的二维数组 int lowbit(int x){ return x&(-x); } void update(int x,int y,int p,int k){ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=m;j+=lowbit(j)) t[p][i][j]+=k; } int getsum(int x,int y,int p){ int sum=0; for(int i=x;i;i-=lowbit(i)) for(int j=y;j;j-=lowbit(j)) sum+=t[p][i][j]; return sum; } 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]); update(i,j,a[i][j],1); } } scanf("%d",&q); for(int i=1;i<=q;i++){ int k; scanf("%d",&k); int x1,x2,y1,y2,c; if(k==1){ scanf("%d %d %d",&x1,&y1,&c); update(x1,y1,a[x1][y1],-1); a[x1][y1]=c; update(x1,y1,a[x1][y1],1); } else{ scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c); int ans=0; ans=getsum(x2,y2,c)-getsum(x1-1,y2,c)-getsum(x2,y1-1,c)+getsum(x1-1,y1-1,c); cout<<ans<<endl; } } return 0; }
相关文章推荐
- BZOJ 1452: [JSOI2009]Count [二维树状数组]
- 【二维树状数组】BZOJ1452 [JSOI2009]Count
- [BZOJ1452] Count 二维树状数组
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- |BZOJ 1452|树状数组|[JSOI2009]Count
- 【树状数组】bzoj 1452 Count
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- 【BZOJ-1452】Count 树状数组 套 树状数组
- 【二维树状数组】bzoj1452 [JSOI2009]Count
- [二维树状数组]BZOJ 1452—— [JSOI2009]Count
- [bzoj1452][树状数组]Count
- bzoj1452 二维树状数组
- 【BZOJ】【P1452】【JSOI2009】【Count】【二维树状数组】
- 1452: [JSOI2009]Count 二维树状数组
- bzoj 1452 二维树状数组
- 1452: [JSOI2009]Count (树状数组)
- 【整体二分+树状数组】BZOJ2527 [Poi2011]Meteors
- [BZOJ2738]矩阵乘法-二维树状数组-整体二分
- 树状数组【bzoj1103】: [POI2007]大都市meg