您的位置:首页 > 其它

随便写写

2010-11-21 17:39 176 查看
很悲剧 刚刚写完 页面崩溃了 写的东西都没了 还以为这个博客可以自动保存呢 不想再写一遍了

刚刚 看了树状数组 精髓还是没有理解 写了一个题目 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: