博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维树状数组
阅读量:6795 次
发布时间:2019-06-26

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

BZOJ3132

#include 
#include
#define LL intusing namespace std; int n,m; LL tr1[2052][2052],tr2[2052][2052],tr3[2052][2052],tr4[2052][2052]; char st[11]; int lowbit(int x){ return(x&(-x)); } void ed(LL tr[][2052],int x,int y,LL num){ for (int i=x;i<=n+1;i+=lowbit(i)) for (int j=y;j<=n+1;j+=lowbit(j)) tr[i][j]+=num; } LL que(LL tr[][2052],int x,int y){ LL ret=0; for (int i=x;i;i-=lowbit(i)) for (int j=y;j;j-=lowbit(j)) ret+=tr[i][j]; return(ret); } void edi(LL x,LL y,LL num){ ed(tr1,x,y,num); ed(tr2,x,y,x*num); ed(tr3,x,y,y*num); ed(tr4,x,y,x*y*num); } LL query(LL x,LL y){ LL ret=0; ret+=(x+1)*(y+1)*que(tr1,x,y); ret-=(y+1)*que(tr2,x,y); ret-=(x+1)*que(tr3,x,y); ret+=que(tr4,x,y); return(ret); } int main(){ scanf("%*s%d%d",&n,&m); int t1,t2,t3,t4,t5,x1,x2,y1,y2; while (scanf("%s",&st)!=EOF){ if (st[0]=='L'){ scanf("%d%d%d%d%d",&t1,&t2,&t3,&t4,&t5); x1=t1;y1=t2;x2=t3;y2=t4; edi(x1,y1,t5); edi(x1,y2+1,-t5); edi(x2+1,y1,-t5); edi(x2+1,y2+1,t5); }else{ scanf("%d%d%d%d",&t1,&t2,&t3,&t4); x1=t1;y1=t2;x2=t3;y2=t4; LL ans=0; ans+=query(x2,y2); ans-=query(x1-1,y2); ans-=query(x2,y1-1); ans+=query(x1-1,y1-1); printf("%d\n",ans); } } }

 

转载于:https://www.cnblogs.com/zhujiangning/p/6305695.html

你可能感兴趣的文章
ORA-06502 awr
查看>>
订单需求
查看>>
职业规划,人生道理
查看>>
android 测试 --使用sqlite3查看手机数据库系统
查看>>
KVM(一)安装篇
查看>>
Oracle 学习之RMAN(十二)恢复实战--控制文件丢失
查看>>
BGP路由黑洞实验
查看>>
Utuntu14.04下salt的使用
查看>>
centos使用gmail发送邮件
查看>>
SQL中各种join用法--join、innerJoin、leftJoin、rightJoin
查看>>
win10部署sonar代码扫描工具
查看>>
我的友情链接
查看>>
二叉树
查看>>
图解CentOS6.8安装详情
查看>>
80后...奔三的我们都该看看
查看>>
【入门教程】使用C#开发SequoiaDB的应
查看>>
Ajax框架
查看>>
在 Kubernetes 上运行 PostgreSQL
查看>>
汇总制定目录下的CSV 文件内容至统一目录中
查看>>
获得执行jar的运行路径-使用java.class.path 和 codesource的location
查看>>