[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}) ...
随机推荐
- 【HNOI2009】梦幻布丁
题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式 第一 ...
- 通过iframe标签绕过csp
iframe.php代码如下: allow-popups开启时,window.open就可以打开新的窗口. 看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.loca ...
- Mybatis Plus启动注入 SQL 原理分析
1) 问题: xxxMapper 继承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有 SQL, ...
- RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态
场景 现有节点Node1和Node2,建立Exchange:yu.exchange,创建队列yu1.queue镜像队列master位于Node1,yu2.queue镜像队列位于Node2,使用topi ...
- oracle安装程序异常终止解决办法
安装Oracle时总是会报程序异常终止,摸不着头脑,作为初学者一下就乱了分寸 工具/原料 Oracle软件包 win764位 方法/步骤 右击Oracle安装图标setup.exe,选 ...
- iOS开发--MQTT实时处理数据
一. MQTT 一个物联网项目中用到了MQTT协议, 可以用来做设备与软件之间的互通. MQTT: 即时通讯协议, 传输层协议 二. 常用: 1.MQTTKit(已经不维护了) 2.MQTTClien ...
- let与var的区别,为什么什么要用let?
1.var是全局声明,let是块级作用的,只适用于当前代码块 var a = 1: if(true){ let a; a=22: console.log(a);'//22 } if(){}内就是let ...
- codeforces 979 C. Kuro and Walking Route
C. Kuro and Walking Route time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- linux 学习第十四天(Apache安装、基于ip、基于域名、基于端口配置)
一.虚拟主机 A.基于IP地址 B.基于域名 C.基于端口号 复习yum仓库挂载 mkdir /media/cdrom mount /dev/cdrom /media/cdrom/ vim /et ...
- 网页中的图像<img>
插入图像 img标记的属性及描述 属性 值 描述 alt text 定义有关图形的短描述 src URL 要显示图像的URL height pixels% 定义图像的高度 width pixels% ...