题目链接:https://vjudge.net/problem/POJ-1195

题意:有s*s的矩阵,初始化为全0,有两种操作,单点修改(x,y)的值,区间查询(x,y)的值(l<=x<=r,b<=y<=t)。

思路:二维树状数组裸应用查询区间(l,b)~(r,t)的值可转换为tr[r][t]-tr[l-1][t]-tr[r][b-1]+tr[l-1][b-1]。要注意的是输入的x,y是从0开始的,所以要加1。

AC代码:  

#include<cstdio>
#include<cctype>
using namespace std; inline int read(){
int x=,f=;char c=;
while(!isdigit(c)){f|=c=='-';c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
} int op,s,tr[][]; int lowbit(int x){
return x&(-x);
} void update(int x,int y,int k){
while(x<=s){
int tmp=y;
while(tmp<=s){
tr[x][tmp]+=k;
tmp+=lowbit(tmp);
}
x+=lowbit(x);
}
} int query(int x,int y){
int ans=;
while(x>){
int tmp=y;
while(tmp>){
ans+=tr[x][tmp];
tmp-=lowbit(tmp);
}
x-=lowbit(x);
}
return ans;
} int main(){
op=read(),s=read();
while(op=read(),op!=){
if(op==){
int x=read()+,y=read()+,k=read();
update(x,y,k);
}
else{
int l=read()+,b=read()+,r=read()+,t=read()+;
printf("%d\n",query(r,t)-query(l-,t)-query(r,b-)+query(l-,b-));
}
}
return ;
}

最新文章

  1. 消除左递归c语言文法
  2. Oracle 数据库重放(Database Replay)功能演示
  3. mysql安装中出现的问题,
  4. Linux(CentOS)系统下设置nginx开机自启动
  5. javascript this 详解
  6. TortoiseGit中push的使用
  7. Swift - String与NSString的区别,以及各自的使用场景
  8. Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]
  9. HDU 1698 Just a Hook 线段树+lazy-target 区间刷新
  10. PAT甲级
  11. 力扣(LeetCode)461. 汉明距离
  12. codeforces959C
  13. day3----编码-集合-深浅copy-文件操作-函数初识
  14. advertisingIdentifier
  15. 【星云测试】Devops微服务架构下具有代码级穿透能力的精准测试
  16. Windows无法访问局域网内共享文件夹[0x800704cf,0x80070035]解决方案
  17. JZOJ.5331【NOIP2017模拟8.23】壕游戏
  18. Spring框架 之IOC容器 和AOP详解
  19. 针对jquery的ajax中的参数理解
  20. web测试中的测试点和测试方法总结

热门文章

  1. Linux基础命令-系统时间
  2. 表有外键所以delete报错了,这里有2种办法处理:
  3. Day2-Python基础2---字符编码与转码
  4. AngularJS:动画
  5. cpu上下文切换(下)
  6. Spring学习十一
  7. mjpg-streamer在Ubuntu下编译,运行
  8. 关联,聚合和组合(复合)--Association, Aggregation and Composition
  9. delphi 安卓配置教程
  10. IRedisClient