bzoj 3132 二维树状数组
来源:互联网 发布:淘宝千人千面收费吗 编辑:程序博客网 时间:2024/06/15 20:28
题意:一个n*m初始为空的矩阵,资磁两种操作:(1)某个子矩阵的值都增加c (2)输出某个子矩阵的权值和
用a[i,j]表示(i,j)~(n,m)的增量,则对于(1,1)~(x,y)的权值和ans
ans=sigma(a[i,j]*(x-i+1)*(y-j+1))(1<=i<=x,1<=j<=y)
=sigma(a[i,j]*(x+1)*(y+1)-j*(x+1)*a[i,j]-i*(y+1)*a[i,j]+i*j*a[i,j]) (1<=i<=x,1<=j<=y)
=(x+1)*(y+1)*sigma(a[i,j])-(x+1)*sigma(j*a[i,j])-(y+1)*sigma(i*a[i,j])+sigma(i*j*a[i,j]) (1<=i<=x,1<=j<=y)
维护四个树状数组分别为
1:sigma(a[i,j])
2:sigma(j*a[i,j])
3:sigma(i*a[i,j])
4:sigma(i*j*a[i,j])
{$Q-}var n,m,x1,x2,y1,y2,c :longint; ch :char; t :array[0..4,0..2105,0..2105] of longint;procedure _add(z,x,y,v:longint);var tt:longint;begin while x<=n do begin tt:=y; while tt<=m do begin inc(t[z,x,tt],v); inc(tt,tt and (-tt)); end; inc(x,x and (-x)); end;end;procedure change(x1,y1,x2,y2,c:longint);begin _add(1,x1,y1,c); _add(1,x2+1,y2+1,c); _add(1,x1,y2+1,-c); _add(1,x2+1,y1,-c); // _add(2,x1,y1,y1*c); _add(3,x1,y1,x1*c); _add(2,x2+1,y2+1,(y2+1)*c); _add(3,x2+1,y2+1,(x2+1)*c); _add(2,x1,y2+1,-(y2+1)*c); _add(3,x1,y2+1,-x1*c); _add(2,x2+1,y1,-y1*c); _add(3,x2+1,y1,-(x2+1)*c); // _add(4,x1,y1,x1*y1*c); _add(4,x2+1,y2+1,(x2+1)*(y2+1)*c); _add(4,x1,y2+1,-x1*(y2+1)*c); _add(4,x2+1,y1,-(x2+1)*y1*c);end;function find(z,x,y:longint):longint;var tt,ans:longint;begin ans:=0; while x>0 do begin tt:=y; while tt>0 do begin inc(ans,t[z,x,tt]); dec(tt,tt and (-tt)); end; dec(x,x and (-x)); end; exit(ans);end;function sum(x,y:longint):longint;begin exit(find(1,x,y)*(x+1)*(y+1)-(x+1)*find(2,x,y)-(y+1)*find(3,x,y)+find(4,x,y));end;begin read(ch); readln(n,m); while not eof do begin read(ch); if ch='L' then begin readln(x1,y1,x2,y2,c); change(x1,y1,x2,y2,c); end else begin readln(x1,y1,x2,y2); writeln(sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1)); end; end;end.——by Eirlys
0 0
- bzoj 3132 二维树状数组
- bzoj 1452 二维树状数组
- 【BZOJ】【P1452】【JSOI2009】【Count】【二维树状数组】
- BZOJ 1452 [JSOI2009]Count 二维树状数组
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- BZOJ 1452: [JSOI2009]Count 二维树状数组
- BZOJ 3132: 上帝造题的七分钟【树状数组(二维区间加,区间查询
- 【BZOJ 3132】上帝造题的七分钟【二维树状数组】
- 【bzoj 3132】上帝造题的七分钟(二维树状数组)
- BZOJ 1452: [JSOI2009]Count (二维树状数组)
- BZOJ 1452 JSOI 2009 Count 二维树状数组
- BZOJ 2738 矩阵乘法 整体二分+二维树状数组
- BZOJ 2244 SDOI2011 拦截导弹 CDQ分治/二维树状数组
- 【bzoj 1452】[JSOI2009]Count(二维树状数组)
- bzoj 2738: 矩阵乘法 cdq分治+二维树状数组
- BZOJ 2738 矩阵乘法 整体二分+二维树状数组
- bzoj 2738: 矩阵乘法 (整体二分+二维树状数组)
- 二维树状数组(bzoj 1452: [JSOI2009]Count)
- 《软技能-代码之外的生存能力》第四篇——生产力
- Disable Network Manager in Ubuntu
- Github全面详解-13解决文件冲突
- 只有mdf文件和ldf文件,怎么恢复数据库
- 行为型模式: 策略模式
- bzoj 3132 二维树状数组
- 初等爬虫的学习过程1
- Description Resource Path Location Type cvc-complex-type.2.4
- 性能监控的好工具
- 软件架构设计
- #.java实现九九乘法表
- Arm架构异常处理流程之中断
- Ubuntu下LAMP环境搭建 Apache、MySQL、PHP
- 手动配置 WIFI无线网络 (Ubuntu 16.04)