这篇主要是来介绍前缀和的QAQ。

前缀和有一维的和二维的,一维的很容易理解,高中数学必修5第二章数列给出了前n项和的概念,就是前缀和。一维的我们在这里简单说一句。

一维前缀和

预处理:在输入一个数列的时候累加

查询区间和:查询[i,j]区间全部元素的和--sum[j]-sum[i-1]

二维前缀和

预处理:用到了容斥原理的知识。即求矩阵左上角的顶点与当前点所围成的矩形所覆盖的权值。

设f[][]为前缀和数组,则f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+a[i][j]

(注:图片来源@ShawnZhou 神犇,原文地址,感谢,侵删。)

查询区间和:

  对于一个边长为R的正方形,以(i,j)作为右下角的,那它矩阵中的和为

  s[i][j]-s[i-R,j]-s[i,j-R]+s[i-R,j-R]

放两道例题跑(

例题1 [HNOI2003]激光炸弹

前缀和+枚举边长

 #include<cstdio>
#include<algorithm>
using namespace std;
int n,R,ans;
int f[][];
int main()
{
scanf("%d%d",&n,&R);
for(int i=;i<=n;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
f[x+][y+]=z;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
f[i][j]+=f[i-][j]+f[i][j-]-f[i-][j-];
}
for(int i=;i<=-R;i++)
for(int j=;j<=-R;j++)
{
int tmp=f[i+R][j+R]-f[i+R][j]-f[i][j+R]+f[i][j];
ans=max(tmp,ans);
}
printf("%d",ans);
return ;
}

例题2 最大正方形

可能是隐藏在dp标签下的一个叛徒这题我觉得用前缀和最简单,而且还是01矩阵,只要预处理出前缀和然后枚举最大正方形的边长大小,再看矩阵中权值和是否等于边长*边长即可。以及注意边界问题。

 #include<cstdio>
#include<algorithm> using namespace std; int n,m,ans;
int f[][]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&f[i][j]);
f[i][j]+=f[i-][j]+f[i][j-]-f[i-][j-];
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=max(n,m);k++)
{
if(i-k<) continue;
if(j-k<) continue;
int qwq=f[i][j]-f[i-k][j]-f[i][j-k]+f[i-k][j-k];
if(qwq==k*k) ans=max(ans,k);
}
printf("%d",ans);
return ;
}

*update on 10-18

noip2014无线网络发射器选址

二维前缀和裸题,当然也可直接枚举中心统计。

但是发现自己前缀和这理解可能有点问题hhh。

其实是这样的qwq。(当然变量名不能用x1y1之类的啦)

 #include<cstdio>
#include<algorithm>
#include<iostream> using namespace std;
typedef long long ll; int d,n;
ll tot,ans;
ll w[][]; int main()
{
// freopen("1.out","w",stdout);
scanf("%d%d",&d,&n);
for(int i=;i<=n;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
w[x][y]=z;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
w[i][j]+=w[i-][j]+w[i][j-]-w[i-][j-];
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
//if(i-d<0||i+d>128||j-d<0||j+d>128) continue;
int tx=(i+d<=) ? (i+d) : ;
int ty=(j+d<=) ? (j+d) : ;
int lx=(i-d>=) ? (i-d) : ;
int ly=(j-d>=) ? (j-d) : ;
ll tmp=w[tx][ty]-w[tx][ly-]-w[lx-][ty]+w[lx-][ly-];
//if(i==120&&j==120) cout<<tx<<" "<<ty<<" "<<lx<<" "<<ly;
//if(i==120&&j==120) cout<<tmp;
if(tmp>ans) ans=tmp,tot=;
else if(tmp==ans) tot++;
}
printf("%lld %lld",tot,ans);
return ;
}

前缀和小结 By cellur925的更多相关文章

  1. 序列/树上差分小结 By cellur925

    首先我们需要注意一下的是,差分比较适用于修改比较多而查询比较少的情况. 一.序列上差分 借教室  这是一道二分答案,在check函数中用到差分技巧的一道题,譬如说我们要把一个序列中[l,r]区间都加上 ...

  2. Luogu P3941 入阵曲【前缀和】By cellur925

    题目传送门 题目大意:给你一个\(n\)*\(m\)的矩阵,每个位置都有一个数,求有多少不同的子矩阵使得矩阵内所有数的和是\(k\)的倍数. 数据范围给的非常友好233,期望得到的暴力分:75分.前1 ...

  3. 最长XX序列问题小结 By cellur925

    今天我们搞一搞几个经典序列问题之间的爱♂恨♂情♂仇. 首先我们看一看LIS(最长上升子序列)(From my onenote)

  4. 状压dp小结 By cellur925

    会一直慢慢写的... 一.一些技巧(位运算) 取出整数n在二进制表示下的第k位,检验是否为1---(n>>k)&1 求最后完备状态(假设都是1),有n个待枚举状态,结果是(1< ...

  5. Item2 + zsh

    转自 http://11ten.gitcafe.io/book-a/iTerm2/index.html iTerm2的主要特点: 开源免费. 兼容性比默认Terminal更好.对于经常要远程使用的情况 ...

  6. python 字符串前缀u, r, b小结

    http://note.youdao.com/noteshare?id=a0da9c2d044d270fa8cb162b932c47e8

  7. poj2893 M*N puzzle 【n*m数码问题小结】By cellur925

    题目传送门 这个问题是来源于lydrainbowcat老师书上讲排序的一个扩展.当时讲的是奇数码问题,其实这种问题有两种问法:一种局面能否到另一种局面.到达目标局面的最小步数. 本文部分内容引用于ly ...

  8. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  9. [转]FINDSTR正则表达式小结

    前言:最近写了一个bat用于快速编译swf至目标目录,想利用FINDSTR命令通过匹配目标目录名称,匹配数量大概600多个,发现匹配耗时比较久,大概花费10余秒,因此还是放弃字符匹配,乖乖拼出全称来定 ...

随机推荐

  1. 洛谷——P3225 [HNOI2012]矿场搭建

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

  2. [Bzoj2500]幸福的道路(树上最远点)

    2500: 幸福的道路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 474  Solved: 194[Submit][Status][Discuss ...

  3. INFO org.apache.hadoop.ipc.RPC: Server at master/192.168.200.128:9000 not available yet, Zzzzz...

    hadoop 启动时namenode和datanode可以启动,使用jps命令也可以看到进程,但是在浏览器中输入master:50070却没有显示datanode 查看datanode的log日志: ...

  4. Jekyll 搭建

    Jekyll搭建个人主页 早上昨晚上弄hexo的时候就开始有问题,发现命令有错误!今天早上来就开始把另外建立了仓库,转Jekyll,并不顺利,做了一天了,基本的theme的本地和远端主页可以显示,但当 ...

  5. maven 的编译插件的配置

    原文: https://stackoverflow.com/questions/29258141/maven-compilation-error-use-source-7-or-higher-to-e ...

  6. [Zlib]_[0基础]_[使用zlib库压缩文件]

    场景: 1. WIndows上没找到系统提供的win32 api来生成zip压缩文件, 有知道的大牛麻烦留个言. 2. zlib比較经常使用,编译也方便,使用它来做压缩吧. MacOSX平台默认支持z ...

  7. oracle授权、表备份、用户管理

    用户管理 创建用户: create user 用户名 identified by 密码; 修改用户密码: alter user 用户名 identified by 密码; 激活用户: alter us ...

  8. Linux 文本编辑

    文本编辑: 查看文本内容:    cat:将文件连接并显示    -n:显示时将文件每一行编号        tac:类似于cat,但其功能是逆序显示每一行文件       linlin@ubuntu ...

  9. The Pilots Brothers&#39; refrigerator-DFS路径打印

    I - The Pilots Brothers' refrigerator Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format ...

  10. Servlet学习总结,为理解SpringMVC底层做准备

    Servlet 一句话概括 :处理web浏览器,其他HTTP客户端与服务器上数据库或其他应用交互的中间层 Servlet 生命周期 : 1.类加载, 2.实例化并调用init()方法初始化该 Serv ...