poj1195解题报告
2010-04-26 00:03
337 查看
赤裸裸的二维树状数组。需要注意的就是如何求矩形(a,b)-(c,d)(左下角至右上角)的sum。
#include<iostream> using namespace std; int rec[1050][1050]; int maxn=-1; int lowbit(int x) { return x&(-x); } int cal(int x,int y) { int temp; int sum=0; while(x>0) { temp=y; while(temp>0) { sum=sum+rec[x][temp]; temp=temp-lowbit(temp); } x=x-lowbit(x); } return sum; } void add(int x,int y,int num) { int temp; while(x<=maxn) { temp=y; while(temp<=maxn) { rec[x][temp]=rec[x][temp]+num; temp=temp+lowbit(temp); } x=x+lowbit(x); } } void init(int num) { int i,j; maxn=num; for(i=1;i<=maxn;i++) { for(j=1;j<=maxn;j++) rec[i][j]=0; } } int main() { int n,a,b,c,d; int sum; while(1) { scanf("%d",&n); if(n==3) break; if(n==0) { scanf("%d",&a); init(a); } if(n==1) { scanf("%d %d %d",&a,&b,&c); add(a+1,b+1,c); } if(n==2) { sum=0; scanf("%d %d %d %d",&a,&b,&c,&d); sum=sum+cal(c+1,d+1); sum=sum+cal(a,b); sum=sum-cal(a,d+1); sum=sum-cal(c+1,b); printf("%d/n",sum); } } return 0; }
相关文章推荐
- poj 1195 Mobile phones 解题报告
- POJ 1195 解题报告
- poj1195解题报告-树状数组
- POJ - 1195 Mobile phones解题报告(二维树状数组)
- 【POJ 1195 Mobile phones】解题报告
- 【原】 POJ 1195 Mobile phones 2D树状数组 解题报告
- poj 1860 Currency Exchange 解题报告
- POJ 1590解题报告
- poj 1182 食物链 解题报告
- poj1046 解题报告
- POJ 2922 Honeymoon Hike 解题报告(二分+深搜)
- poj解题报告——2299
- POj 1105解题报告
- poj-openjudge 1042:Moles 解题报告
- POJ - 1442 Black Box解题报告(求第k小的数 堆)
- poj1753解题报告(1):DFS算法
- poj1753解题报告(2):BFS
- POJ 2155 解题报告
- poj 2312解题报告
- POJ3228 Gold Transportation 解题报告【贪心+并查集=Kruskal?】