Another Day

waiting for some day .... some day different...

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

很悲剧  刚刚写完  页面崩溃了  写的东西都没了  还以为这个博客可以自动保存呢  不想再写一遍了  

刚刚 看了树状数组 精髓还是没有理解  写了一个题目  poj 1195  很适合初学树状数组的人做   本人菜鸟 刚刚接触acm 把代码贴上吧

 用cin和scanf时间差了一倍

#include <iostream>
#include <stdio.h>
using namespace std;
int MAX;
#define M 1030
void update(int ,int,int );
int c[M][M];

 int lowbit(int);
 int sum(int ,int);
int main()
{
	int result;
   int id,S,x1,y1,x2,y2,X,Y,A;
  cin>>id;
  while(id!=3)
  {
	  if(id==0){
		 cin>>S ;
		 MAX=S;
	  }
	  if(id==1){
		 scanf("%d%d%d",&X,&Y,&A);
		  update(X+1,Y+1,A);
	  }
	  if(id==2){
		  scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		  result=sum(x2+1,y2+1)+sum(x1,y1)-sum(x1,y2+1)-sum(x2+1,y1);
		  cout<<result<<endl;
	  }
	  scanf("%d",&id);
  }
}

//   树状数组 2d

int lowbit(int x)
{
	return x&(-x);
}

int sum(int p,int q)
{
	int total=0;
	int x=p,y;
	while(x>0)
	{
		y=q;
		while(y>0)
		{
			total+=c[x][y];
			y-=lowbit(y);
		}
		x-=lowbit(x);
	}
	return total;
}

void update(int p,int q,int val)
{
    int x=p,y;
    for(x=p;x<=MAX;x+=lowbit(x))
		for(y=q;y<=MAX;y+=lowbit(y))
			c[x][y]+=val;
}


posted on 2010-11-21 17:39  Another Day  阅读(105)  评论(0编辑  收藏  举报