前缀和小结 By cellur925
这篇主要是来介绍前缀和的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的更多相关文章
- 序列/树上差分小结 By cellur925
首先我们需要注意一下的是,差分比较适用于修改比较多而查询比较少的情况. 一.序列上差分 借教室 这是一道二分答案,在check函数中用到差分技巧的一道题,譬如说我们要把一个序列中[l,r]区间都加上 ...
- Luogu P3941 入阵曲【前缀和】By cellur925
题目传送门 题目大意:给你一个\(n\)*\(m\)的矩阵,每个位置都有一个数,求有多少不同的子矩阵使得矩阵内所有数的和是\(k\)的倍数. 数据范围给的非常友好233,期望得到的暴力分:75分.前1 ...
- 最长XX序列问题小结 By cellur925
今天我们搞一搞几个经典序列问题之间的爱♂恨♂情♂仇. 首先我们看一看LIS(最长上升子序列)(From my onenote)
- 状压dp小结 By cellur925
会一直慢慢写的... 一.一些技巧(位运算) 取出整数n在二进制表示下的第k位,检验是否为1---(n>>k)&1 求最后完备状态(假设都是1),有n个待枚举状态,结果是(1< ...
- Item2 + zsh
转自 http://11ten.gitcafe.io/book-a/iTerm2/index.html iTerm2的主要特点: 开源免费. 兼容性比默认Terminal更好.对于经常要远程使用的情况 ...
- python 字符串前缀u, r, b小结
http://note.youdao.com/noteshare?id=a0da9c2d044d270fa8cb162b932c47e8
- poj2893 M*N puzzle 【n*m数码问题小结】By cellur925
题目传送门 这个问题是来源于lydrainbowcat老师书上讲排序的一个扩展.当时讲的是奇数码问题,其实这种问题有两种问法:一种局面能否到另一种局面.到达目标局面的最小步数. 本文部分内容引用于ly ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- [转]FINDSTR正则表达式小结
前言:最近写了一个bat用于快速编译swf至目标目录,想利用FINDSTR命令通过匹配目标目录名称,匹配数量大概600多个,发现匹配耗时比较久,大概花费10余秒,因此还是放弃字符匹配,乖乖拼出全称来定 ...
随机推荐
- codechef Taxi Driver
题意: 给N个点求任意两个点的“距离”总和: A,B的“距离”定义为:min(|ax-bx|,|ay-by|) (n<200000) 好题! 解析: 看着没思路 先是公式化简:让 ax=sx+s ...
- [Bzoj1051][HAOI2006]受欢迎的牛(缩环)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6676 Solved: 3502[Submit][Sta ...
- 转 Linux里设置环境变量的方法(export PATH)
1.动态库路径的设置 Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径 具体操作如下export LD_LIBRARY_PATH= ...
- 从头认识Spring-3.1 简单的AOP日志实现-某方法之前的前后记录日志
这一章节我们引入简单的AOP日志实现. 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03.topic_1_1; pub ...
- Codeforces Round #277 (Div. 2)---C. Palindrome Transformation (贪心)
Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input sta ...
- Android Studio一些简单设置
简单设置 1.默认主题设置 默认的 Android Studio 为灰色界面,能够选择使用炫酷的黑色界面. Settings --> Appearance --> Them ...
- 添加 XML内Rows数据
public static void addItemToXml(string method,string firstKey,string id,string checkName,string refV ...
- mac 使用命令行,对远程服务器进行文件更新
目的:更新服务器文件A 1.远程传输文件 A.zip 在本地A文件的父级文件夹下执行 scp ./A.zip 远程服务器用户名@远程服务器IP:/要放置的文件夹目录/ 然后要输入服务器登陆密码,进行文 ...
- Python爬虫开发【第1篇】【多线程爬虫及案例】
糗事百科爬虫实例: 地址:http://www.qiushibaike.com/8hr/page/1 需求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个帖子里的用户 ...
- (八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:mod=guide&view ...