博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1195 Mobile phones(二维树状数组)
阅读量:5049 次
发布时间:2019-06-12

本文共 1455 字,大约阅读时间需要 4 分钟。

  二维树状数组

#include 
#include
#include
#include
#include
using namespace std;int n;int c[1030][1030];int lowbit(int k){ return k&(-k);}void add(int x,int y,int num){ for(int i = x;i <= n;i += lowbit(i)) for(int j = y;j <= n;j += lowbit(j)) c[i][j] += num;}void sub(int x,int y,int num){ for(int i = x;i >= 0;i -= lowbit(i)) for(int j = y;j >= 0;j -= lowbit(j)) c[i][j] -= num;}int cal(int x,int y){ int sum = 0; for(int i = x;i > 0;i -= lowbit(i)) for(int j = y;j > 0;j -= lowbit(j)) sum += c[i][j]; return sum;}int main(){ int first,op,size; scanf("%d%d",&first,&n); { size = n; memset(c,0,sizeof(c)); for(int i = 1;i <= size;i++) for(int j = 1;j <= size;j++) add(i,j,first); int op; while(scanf("%d",&op) != EOF) { if(op == 1) { int x,y,a; scanf("%d%d%d",&x,&y,&a); x++,y++; add(x,y,a); } else if(op == 2) { int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x1++,y1++,x2++,y2++; int sum = cal(x2,y2) + cal(x1-1,y1-1) - cal(x2,y1-1) - cal(x1-1,y2); printf("%d\n",sum); } else break; } }}

 

转载于:https://www.cnblogs.com/jifahu/p/5449578.html

你可能感兴趣的文章
HTTP协议
查看>>
POJ 1274
查看>>
NSHashtable and NSMaptable
查看>>
不确定性原理的前世今生(转载)
查看>>
MyEclipse项目突然报错JavanotFindClassException
查看>>
冲刺NOIP2015提高组复赛模拟试题(五)1.数学作业
查看>>
H5前期知识点总结9月14日
查看>>
android Fragments详解一:概述
查看>>
Java垃圾收集学习笔记
查看>>
表达式。*是单个字符匹配任意次数,即贪婪匹配化妆
查看>>
canvas绘制文字
查看>>
用Asp.net写自己的服务框架
查看>>
转载WPF简单介绍
查看>>
git常用命令汇总
查看>>
tomcat运行时JVM参数调整
查看>>
Android 四大组件之“ BroadcastReceiver ”
查看>>
Python入门
查看>>
C51关键字
查看>>
js阻止提交表单(post)
查看>>
Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较
查看>>