这篇主要是来介绍前缀和的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. GOF 23种设计模式目录

    经典的gof 23种设计模式,目录大纲查看. 1. Singleton(单例模式) 保证一个类只有一个实例,并提供访问它的全局访问点. 2. Abstract Factory(抽象工厂模式) 提供一个 ...

  2. [Bzoj3209]花神的数论题(数位dp)

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2633  Solved: 1182[Submit][Status][Disc ...

  3. Spring中实现自定义事件

    原理: 通过扩展ApplicationEvent,创建一个事件类CustomEvent.这个类必须定义一个默认的构造函数,它应该从ApplicationEvent类中继承的构造函数. 一旦定义事件类, ...

  4. Enhance Magento 404 page

    Magento default installation already has a predefined custom 404 page (no-route). But is it enough t ...

  5. SGU - 311 Ice-cream Tycoon(线段树)

    Description You've recently started an ice-cream business in a local school. During a day you have m ...

  6. Centos 6.4 实际工作环境搭建(LNMP)

    基本配置 服务器IP设置.编辑网卡配置文件,命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 注:ifcfg-eth0参数  TYPE=Ethernet ...

  7. WHU-1551-Pairs(莫队算法+分块实现)

    Description Give you a sequence consisted of n numbers. You are required to answer how many pairs of ...

  8. grep命令使用技巧

    grep如何实现全词查找例如:要查找name这个单词,反馈的查找结果不能包含namespace这样的模式,但是可以包含name()这样的模式,即要查找的单词两端不可以有其他的数字或者字母,但可以有空格 ...

  9. [转] logback 常用配置详解(序)logback 简介

    转载文章:原文出处:http://aub.iteye.com/blog/1101222 logback 简介 Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日 ...

  10. Entity Framework工具POCO Code First Generator的使用(参考链接:https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator)

    在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...