正题

题目链接:https://www.luogu.com.cn/problem/P7294


题目大意

n×mn\times mn×m的网格,当你在(x,y)(x,y)(x,y)时你有两种选择

  1. 花费x2x^2x2的代价向右移动
  2. 花费cyc_ycy​的代价向下移动

qqq次询问(1,1)(1,1)(1,1)走到(x,y)(x,y)(x,y)的最小代价。

1≤n≤109,1≤m,q≤2×1051\leq n\leq 10^9,1\leq m,q\leq 2\times 10^51≤n≤109,1≤m,q≤2×105


解题思路

假设我们开始都是直接走最上面向右的路(也就是代价都是121^212)。

然后考虑在某个位置(x,y)(x,y)(x,y)要走到(n,m)(n,m)(n,m)时向下走会产生的贡献为cy+(m−y)×(2x+1)c_y+(m-y)\times (2x+1)cy​+(m−y)×(2x+1)(后面要抬m−ym-ym−y个横着走,然后从x2x^2x2到(x+1)2(x+1)^2(x+1)2要到加2x+12x+12x+1)。

然后拆一下就是cy+m−y+2xm−2xyc_y+m-y+2xm-2xycy​+m−y+2xm−2xy。发现斜率−2y-2y−2y是按照yyy递增递减的,而且我们要求选出的若干个cyc_ycy​的yyy一定要递增,但是这样的话我们选出来的一定是递增的所以我们只需要考虑对于每个xxx选择一个yyy使得最小化cy+(m−y)×(2x+1)c_y+(m-y)\times (2x+1)cy​+(m−y)×(2x+1)。

按照询问排序,一个一个加入新的cyc_ycy​,按照斜率维护一个上凸壳,然后在凸壳上面二分就好了。

时间复杂度O(m+qlog⁡m)O(m+q\log m)O(m+qlogm)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10;
struct node{ll n,m,id;
}q[N];
ll n,m,t,top,b[N],k[N],s[N],sum[N],l[N],r[N],ans[N];
ll calc(ll i,ll j)//i<j
{return (b[j]-b[i]+k[i]-k[j]-1)/(k[i]-k[j]);}
ll cap(ll i,ll j){ll x=calc(i,j);if(x<=l[i])return 1;return 0;
}
ll getf(ll x,ll l,ll r)
{return (r+l)*(r-l+1)/2*k[x]+b[x]*(r-l+1);}
bool cmp(node x,node y)
{return x.m<y.m;}
signed main()
{//  freopen("data.in","r",stdin);
//  freopen("data.out","w",stdout);scanf("%lld%lld",&n,&m);for(ll i=1;i<=m;i++){scanf("%lld",&b[i]);b[i]=b[i]-i;k[i]=2*(-i);}scanf("%lld",&t);for(ll i=1;i<=t;i++){scanf("%lld%lld",&q[i].n,&q[i].m);q[i].id=i;}sort(q+1,q+1+t,cmp);for(ll i=1,z=1;i<=m;i++){r[i]=n;while(top>0&&cap(s[top],i))top--;if(top)l[i]=max(calc(s[top],i),1ll);else l[i]=1;if(l[i]<=r[i]){r[s[top]]=l[i]-1;s[++top]=i;sum[top-1]=((top>1)?sum[top-2]:0)+getf(s[top-1],l[s[top-1]],r[s[top-1]]);sum[top]=sum[top-1]+getf(i,l[i],r[i]);}   while(z<=t&&q[z].m<=i){ll qn=q[z].n-1,L=1,R=top;while(L<=R){ll mid=(L+R)>>1;if(r[s[mid]]<qn)L=mid+1;else R=mid-1;}ans[q[z].id]=sum[L-1]+getf(s[L],l[s[L]],qn)+(qn+1)*qn*i+i*qn+i-1;z++;}}for(ll i=1;i<=t;i++)printf("%lld\n",ans[i]);return 0;
}

P7294-[USACO21JAN]Minimum Cost Paths P【单调栈】相关推荐

  1. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

  2. [费用流专题]Going Home,Minimum Cost,工作安排

    文章目录 T1:Going Home 题目 题解 CODE T2:Minimum Cost 题目 题解 CODE T3:工作安排 题解 CODE T1:Going Home 题目 On a grid ...

  3. 【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Two arrays u and v each with m distinct elem ...

  4. LeetCode第 57 场力扣夜喵双周赛(差分数组、单调栈) and 第 251 场力扣周赛(状态压缩动规,树的序列化,树哈希,字典树)

    LeetCode第 57 场力扣夜喵双周赛 离knight勋章越来越近,不过水平没有丝毫涨进 1941. 检查是否所有字符出现次数相同 题目描述 给你一个字符串 s ,如果 s 是一个 好 字符串,请 ...

  5. POJ2796 Feel Good(单调栈)

    题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可, ...

  6. 【单调栈 前缀和 异或】7.21序列求和

    还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题.她定义一个区间的价值是max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)max(ai) ...

  7. 栈与队列7——单调栈结构(进阶问题)

    题目 一个含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{{ ...

  8. 栈与队列7——单调栈结构(初阶问题)

    题目 一个不含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{ ...

  9. 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]

    题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii ...

最新文章

  1. TensorRT学习笔记(三)
  2. 一些Jquery操作
  3. SQL2K数据库开发二十六之存储过程操作创建存储过程(一)
  4. 关于uWSGI服务器的安装和启动(一)
  5. webservice restful类型接口的调用实例
  6. QTP、LoadRunner、QC工具下载地址
  7. 《乌合之众》读书笔记(part1)--对群体而言,最不公正的也许却是最好的
  8. 轻松学PHP编程 源代码
  9. java中参数“ ...“的用法和意思
  10. Linux中使用定时任务每周定时清理45天以前日志
  11. 微信小程序图片四个API用法
  12. 文献学习笔记丨转录组表达数据的生信挖掘研究
  13. 手机测试SD卡读写速度的软件,手机存储SD卡读写测试:Cross Platfrom Disk Test
  14. 360全景倒车影像怎么看_最近淘了一个360度全景倒车影像-4路行车记录仪监控录像,和大家分享一下...
  15. 【计算机网络】根据IP地址计算网络地址
  16. csdn邻家割草_如何维护割草机,使其永远持续(几乎)
  17. java安装未指定的错误_安装redistributable(x64)出现0x80240017未指定的错误
  18. Java中的Hash Code到底是什么?
  19. Visual Studio 2010已安装,sql server 2008 management studio安装教程
  20. 体验一次Mac Win10主题——Win10美化之路

热门文章

  1. 主机挂载存储_备战CKA每日一题——第3天 | 对接CSI存储知识
  2. 一般将来时语法课教案_速看,如何在考场写出一篇脱颖而出的教案
  3. access对比数据_数据仓库系列之数据质量管理
  4. 网页表格线框html,关于Dreamweaver中怎么让html网页中的table边框细线显示?
  5. python ctp接口_使用ctp的python接口
  6. php 结构体_php基础知识集合
  7. 树莓派安装python3.5_梦见树_周公解梦梦到树是什么意思_做梦梦见树好不好_周公解梦官网...
  8. mysql 用户概念_传输概念 – db对象的用户/组/权限从mysql到postgresql
  9. leetcode450. 删除二叉搜索树中的节点(详解)
  10. 可视化太酷辽!一文了解排序和搜索算法在前端中的应用