博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj 1452】[JSOI2009]Count(二维树状数组)
阅读量:4988 次
发布时间:2019-06-12

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

1452: [JSOI2009]Count

Time Limit: 10 Sec  
Memory Limit: 64 MB
Submit: 2094  
Solved: 1232
[ ][ ][ ]

Description

Input

Output

Sample Input



Sample Output

1
2

HINT

Source

[ ][ ][ ]

【题解】【树状数组】

【二维树状数组,不要想太多,只要把一维改成二维,给每种权值建一棵树状数组(权值数不超过100种),然后正常做就行】

#include
#include
#include
using namespace std;int tree[310][310][110];int a[310][310],n,m,q;inline void add(int x,int y,int num,int val){ for (int i=x;i<=n;i+=i&(-i)) for (int j=y;j<=m;j+=j&(-j)) tree[i][j][num]+=val;}inline int ask(int x,int y,int num){ int sum=0; for (int i=x;i>=1;i-=i&(-i)) for (int j=y;j>=1;j-=j&(-j)) sum+=tree[i][j][num]; return sum;}int main(){ int i,j; scanf("%d%d",&n,&m); for (i=1;i<=n;++i) for (j=1;j<=m;++j) { scanf("%d",&a[i][j]); add(i,j,a[i][j],1); } scanf("%d",&q); for (i=1;i<=q;++i) { int num; scanf("%d",&num); if (num==1) { int x,y,val; scanf("%d%d%d",&x,&y,&val); add(x,y,a[x][y],-1); add(x,y,val,1); a[x][y]=val; } else { int x1,x2,y1,y2,val,ans; scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&val); int ans1=ask(x2,y2,val); int ans2=ask(x1-1,y2,val); int ans3=ask(x2,y1-1,val); int ans4=ask(x1-1,y1-1,val); ans=ans1-ans2-ans3+ans4; printf("%d\n",ans); } }}

转载于:https://www.cnblogs.com/lris-searching/p/9403053.html

你可能感兴趣的文章
Java RMI 框架_远程方法调用(2016-08-16)
查看>>
python excel导入到数据库
查看>>
应用程序池DefaultAppPool提供服务的进程关闭时间超过了限制
查看>>
数据流
查看>>
基于vlc的android视频播放器开发笔录
查看>>
silverlight DataGrid 模拟实现双击行事件
查看>>
将文件内容导入到MySQL中
查看>>
Centos Ping不通外网
查看>>
类方法和静态方法
查看>>
20162315第一次实验报告
查看>>
IP地址相关运算(如VLSM,超网汇总)
查看>>
批处理bat脚本编写(附详细例子)
查看>>
type="button"和type="submit"的区别
查看>>
什么是javascript闭包?
查看>>
一个javascript面试题
查看>>
remoting例子
查看>>
老程序员的优势有哪些?
查看>>
求导积分泰勒展开
查看>>
织梦搜索结果页调用自定义字段内容
查看>>
构建之法第七章读后感
查看>>