[arc067F]Yakiniku Restaurants[矩阵差分]
Description
Solution
假如我们确定了烧烤店区间[l,r],则票j必定会选择在B[i][j](l<=i<=r)最大的烧烤店使用。
反过来想,我们想要票j在第i个烧烤店使用,寻找可行区间[L,R]。
为了避免重复计算,我们钦定$k\epsilon [L,i]$时B[k][j]<B[i][j],$k\epsilon [i,R]$时B[k][j]<=B[i][j]。
接下来我们构造一个矩阵,矩阵的横坐标代表可行区间的左端点L,纵坐标表示可行区间的右端点R,对矩阵进行差分。使得当查询到子矩阵(L[i],i)-(i,R[i])时答案会加上B[i][j]。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int n,m,A[],B[][];
ll matrix[][];int l[],r[];
int st[],tp;
ll sum[];
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) {scanf("%d",&A[i]);sum[i]=sum[i-]+A[i];}
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
scanf("%d",&B[i][j]);
for (int j=;j<=m;j++)
{
tp=;
for (int i=;i<=n;i++)
{
while (tp&&B[i][j]>B[st[tp]][j]) r[st[tp--]]=i-;
st[++tp]=i;
}
while (tp) r[st[tp--]]=n;
tp=;
for (int i=n;i;i--)
{
while(tp&&B[i][j]>=B[st[tp]][j]) l[st[tp--]]=i+;
st[++tp]=i;
}
while (tp) l[st[tp--]]=;
for (int i=;i<=n;i++)
{
matrix[i+][r[i]+]+=B[i][j];
matrix[l[i]][i]+=B[i][j];
matrix[l[i]][r[i]+]-=B[i][j];
matrix[i+][i]-=B[i][j];
}
}
ll ans=;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
{
matrix[i][j]+=matrix[i-][j]+matrix[i][j-]-matrix[i-][j-];
if (i<=j) ans=max(ans,matrix[i][j]-(sum[j]-sum[i]));
}
cout<<ans;
}
[arc067F]Yakiniku Restaurants[矩阵差分]的更多相关文章
- [arc067f]yakiniku restaurants
题意: n家饭店,m张餐票,第i家和第i+1家饭店之间的距离是$A_i$,在第i家饭店用掉第j张餐票会获得$B_{i,j}$的好感度,但是从饭店i走到饭店j会有$dis_{i,j}$的代价,可以从任意 ...
- 【AtCoder】ARC067 F - Yakiniku Restaurants 单调栈+矩阵差分
[题目]F - Yakiniku Restaurants [题意]给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终 ...
- bzoj 4500: 矩阵 差分约束系统
题目: Description 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 选择一行, 该行每个格子的权值加1或减1. 选择一列, 该列每个格子的权值加1或减1. 现在有K ...
- BZOJ 4500: 矩阵 差分约束
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4500 题解: 从行向列建边,代表一个格子a[i][j],对每个顶点的所有操作可以合并在一 ...
- BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多少权值, ...
- AtCoder Regular Contest 067 F - Yakiniku Restaurants
题意: 有n个餐厅排成一排,第i个与第i+1个之间距离是Ai. 有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$. 选择每种食物在哪个餐厅里吃,使收益减去走 ...
- NOIp2018模拟赛三十六
好久没打模拟赛了...今天一样是两道国集,一道bzoj题 成绩:13+0+95=108 A题开始看错题了...导致样例都没看懂,结果xfz提醒我后我理解了一个我自认为正确的题意(事实证明我和xfz都错 ...
- ACwing : 798. 差分矩阵
不得不说之前的差分我真的是掌握的不好.. 一维差分确实简单一看就会,但是学会了之后却并不能灵活的运用. 而二维的差分我甚至还琢磨了很长时间 懒得画图所以没有图..对于二维差分的定义,百度百科是这么说的 ...
- 【AtCoder】ARC067
ARC067 C - Factors of Factorial 这个直接套公式就是,先求出来每个质因数的指数幂,然后约数个数就是 \((1 + e_{1})(1 + e_{2})(1 + e_{3}) ...
随机推荐
- 翻译-QPKG开发工具快速开始指南
QPKG开发工具快速开始指南 指导你编译你自己的QPKG软件包 目录 什么是QDK 下载QDK 安装QDK 编译你自己的QPKG软件包 搭建QPKG编译环境 配置QPKG 定制QPKG程序 向QPKG ...
- jquery实现的时间轴
代码 样式文件style.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...
- JavaScript浏览器检测之navigator 对象
一.使用客户端检测的原因 由于每个浏览器都具有自己独到的扩展,所以在开发阶段来判断浏览器是一个非常重要的步骤. 虽然浏览器开发商在公共接口方面投入了很多精力,努力的去支持最常用的公共功能: 但在现实中 ...
- Math Summary 数论总结
一.素数 Miller-Rabin 首先介绍一下伪素数:若n是一个正整数,且存在正整数a满足$a^{n-1}\equiv1\;(mod\;n)$ (费马小定理,但n不一定为素数) 那么我们说n是基于a ...
- BZOJ1259:[CQOI2007]矩形rect(DFS)
Description 给一个a*b矩形,由a*b个单位正方形组成.你需要沿着网格线把它分成分空的两部分,每部分所有格子连通,且至少有一个格子在原矩形的边界上.“连通”是指任两个格子都可以通过水平或者 ...
- linux中安装jdk以及eclipse的安装
最近将系统换成了linux(ubuntu14.04),随之而来的是各种软件的配置,环境的配置,因此趁机将自己的过程整理出来. 1:linux中怎么安装jdk 1 首先现在jdk源文件http://ww ...
- VS2012打开Web项目提示《ASP.NET 4.X 尚未在Web服务器上注册。你需要手动将...》解决方案
用VS12创建的WEB项目时,默认使用IIS Experess开发服务器,但是每次打开会提示如下提示 但是同一个项目用VS13或VS15打开时,就能正常打开,不会出现以上提示信息. 怀疑是IIS Ex ...
- 设置eclipse默认编码格式
Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...
- react+webpack搭建项目
一.环境准备 ①node ②npm 二.开始搭建 ①使用npm安装create-react-app工具,在cmd命令行中输入: npm install -g create-react-app ②使用命 ...
- 多线程系列之 Java多线程的个人理解(一)
前言:多线程常常是程序员面试时会被问到的问题之一,也会被面试官用来衡量应聘者的编程思维和能力的重要参考指标:无论是在工作中还是在应对面试时,多线程都是一个绕不过去的话题.本文重点围绕多线程,借助Jav ...