码迷,mamicode.com
首页 > 其他好文 > 详细

●POJ 1195 Mobile phones

时间:2018-01-27 15:33:11      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:body   sizeof   bit   else   turn   class   ++   cst   mob   

题链:

http://poj.org/problem?id=1195

题解:

二维树状数组

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 1500
using namespace std;
struct BIT{
	int val[MAXN][MAXN],N;
	void Reset(int n){N=n; memset(val,0,sizeof(val));}
	int Lowbit(int x){return x&-x;}
	void Modify(int x,int y,int v){
		x++; y++;
		for(int i=x;i<=N;i+=Lowbit(i))
			for(int j=y;j<=N;j+=Lowbit(j))
				val[i][j]+=v;
	}
	int Sum(int x,int y){
		int ret=0;
		for(int i=x;i;i-=Lowbit(i))
			for(int j=y;j;j-=Lowbit(j))
				ret+=val[i][j];
		return ret;
	}
	int Area(int x1,int y1,int x2,int y2){
		x1++; y1++; x2++; y2++;
		return Sum(x2,y2)-Sum(x1-1,y2)-Sum(x2,y1-1)+Sum(x1-1,y1-1);
	}
}DT;
int main(){
	int cm,a,b,c,d;
	scanf("%d%d",&cm,&a);
	DT.Reset(a);
	while(~scanf("%d",&cm)&&cm!=3){
		if(cm==1) scanf("%d%d%d",&a,&b,&c),DT.Modify(a,b,c);
		else scanf("%d%d%d%d",&a,&b,&c,&d),printf("%d\n",DT.Area(a,b,c,d));
	}
	return 0;
}

  

●POJ 1195 Mobile phones

标签:body   sizeof   bit   else   turn   class   ++   cst   mob   

原文地址:https://www.cnblogs.com/zj75211/p/8365567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!