【BZOJ1452】【JSOI2009】Count 二维树状数组
2015-03-23 09:07
471 查看
链接:
#include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44559155"); }
题解:
暴力维护100个二维树状数组。妈呀因为没测样例就交还RE一次(虽然显示是WA)
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 305 #define P 105 using namespace std; int a[P] ,n,m,p; inline int lowbit(int x){return x&-x;} inline void add(int d,int x,int y,int z) { while(x<=n) { int t=y; while(t<=m) { a[d][x][t]+=z; t+=lowbit(t); } x+=lowbit(x); } } inline int ask(int d,int x,int y) { int ret=0; while(x) { int t=y; while(t) { ret+=a[d][x][t]; t-=lowbit(t); } x-=lowbit(x); } return ret; } inline int query(int d,int x0,int x1,int y0,int y1) { if(x0>x1)swap(x0,x1); if(y0>y1)swap(y0,y1); return ask(d,x1,y1)-ask(d,x0-1,y1)-ask(d,x1,y0-1)+ask(d,x0-1,y0-1); } int x ; int main() { freopen("test.in","r",stdin); int i,j,k; int a,b,c,d; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)for(j=1;j<=m;j++) { scanf("%d",&x[i][j]); add(x[i][j],i,j,1); } scanf("%d",&p); while(p--) { scanf("%d",&k); if(k==1) { scanf("%d%d%d",&a,&b,&c); add(x[a][b],a,b,-1),x[a][b]=c,add(c,a,b,1); } else { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); printf("%d\n",query(k,a,b,c,d)); } } return 0; }
相关文章推荐
- 【bzoj 1452】[JSOI2009]Count(二维树状数组)
- BZOJ 1452 [JSOI2009]Count 二维树状数组
- [BZOJ1452][JSOI2009]Count(二维树状数组)
- bzoj1452: [JSOI2009]Count(二维树状数组)
- BZOJ1452: [JSOI2009]Count 二维树状数组
- BZOJ 1452 JSOI 2009 Count 二维树状数组
- BZOJ 1452: [JSOI2009]Count (二维树状数组)
- BZOJ1452 [JSOI2009]Count(二维树状数组)
- [BZOJ1452][JSOI2009]Count(二维树状数组)
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- 【二维树状数组】bzoj1452 [JSOI2009]Count
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- 【二维树状数组】BZOJ1452 [JSOI2009]Count
- BZOJ 1452: [JSOI2009]Count [二维树状数组]
- BZOJ 1452: [JSOI2009]Count(二维BIT)
- [bzoj1452][JSOI2009]Count_树状数组
- [BZOJ1452]JSOI2009 Count|树状数组
- BZOJ_P1452 [JSOI2009]Count(二维树状数组)
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- bzoj1452[JSOI2009]Count 二维树状数组/树套树