前缀和小结 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余秒,因此还是放弃字符匹配,乖乖拼出全称来定 ...
随机推荐
- GOF 23种设计模式目录
经典的gof 23种设计模式,目录大纲查看. 1. Singleton(单例模式) 保证一个类只有一个实例,并提供访问它的全局访问点. 2. Abstract Factory(抽象工厂模式) 提供一个 ...
- [Bzoj3209]花神的数论题(数位dp)
3209: 花神的数论题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2633 Solved: 1182[Submit][Status][Disc ...
- Spring中实现自定义事件
原理: 通过扩展ApplicationEvent,创建一个事件类CustomEvent.这个类必须定义一个默认的构造函数,它应该从ApplicationEvent类中继承的构造函数. 一旦定义事件类, ...
- Enhance Magento 404 page
Magento default installation already has a predefined custom 404 page (no-route). But is it enough t ...
- SGU - 311 Ice-cream Tycoon(线段树)
Description You've recently started an ice-cream business in a local school. During a day you have m ...
- Centos 6.4 实际工作环境搭建(LNMP)
基本配置 服务器IP设置.编辑网卡配置文件,命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 注:ifcfg-eth0参数 TYPE=Ethernet ...
- WHU-1551-Pairs(莫队算法+分块实现)
Description Give you a sequence consisted of n numbers. You are required to answer how many pairs of ...
- grep命令使用技巧
grep如何实现全词查找例如:要查找name这个单词,反馈的查找结果不能包含namespace这样的模式,但是可以包含name()这样的模式,即要查找的单词两端不可以有其他的数字或者字母,但可以有空格 ...
- [转] logback 常用配置详解(序)logback 简介
转载文章:原文出处:http://aub.iteye.com/blog/1101222 logback 简介 Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日 ...
- 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是一 ...