【UOJ#246】套路(动态规划)

题面

UOJ

题解

假如答案的选择的区间长度很小,我们可以做一个暴力\(dp\)计算\(s(l,r)\),即\(s(l,r)=min(s(l+1,r),s(l,r-1),abs(a_r-a_l))\)。
我们发现\(s(l,r)\le \frac{m}{r-l+1}\),那么当长度足够大的时候\(s(l,r)\)的取值很小。
所以我们对于询问分治处理,当长度小于\(\sqrt m\)时,直接\(dp\)计算贡献。
否则,当长度大于\(\sqrt m\)时,枚举\(s(l,r)\)的值,对于每个右端点计算其合法的最大左端点。
复杂度\(O(n\sqrt m)\)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 200200
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
ll ans;
int a[MAX],n,m,k,blk,s[MAX],lst[MAX],pos[MAX];
int main()
{n=read();m=read();k=read();blk=sqrt(m)+1;for(int i=1;i<=n;++i)a[i]=read(),s[i]=m;for(int l=2;l<=blk;++l){for(int j=1;j+l-1<=n;++j)s[j]=min(abs(a[j]-a[j+l-1]),min(s[j],s[j+1]));if(l>=k)for(int j=1;j+l-1<=n;++j)ans=max(ans,1ll*(l-1)*s[j]);}for(int i=1;i<=n;lst[a[i]]=i,++i)for(int j=0,r=0;j<=blk;++j){if(a[i]-j>=1)pos[j]=max(pos[j],lst[a[i]-j]);if(a[i]+j<=m)pos[j]=max(pos[j],lst[a[i]+j]);if(pos[j]>r&&i-r>=k)ans=max(ans,1ll*(i-r-1)*j);r=max(r,pos[j]);}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/10283683.html

【UOJ#246】套路(动态规划)相关推荐

  1. uoj 246. 【UER #7】套路

    #246. [UER #7]套路 反攻正在进行中,按照套路,跳蚤国将会很快获得最终的胜利.跳蚤国的情报局也没闲下来,他们正打算派遣一批"菲克蚤"前往跳晚国窃取有关三星 note7的 ...

  2. uoj#246. 【UER #7】套路(dp+分块?分类讨论?)

    题目链接 分析: 目前为止我只能理解dp部分 我就喜欢这种单纯不做作的题目 一看名字就明白了这道题的本质 中二的题目描述 很显然,我们的关键就是求出最小相似度 朴素算法n^4 如果我们现在有一个权值数 ...

  3. uoj #246. 【UER #7】套路

    前言 找了个时间做了个一直想做的题 感觉还是很妙哒 题解 我们考虑一个做法 设序列长度为S 首先,如果暴力扫的话,是可以O(ns)O(ns)算出来所有长度为S的最优值的 但是S大的话,就不好办了 然后 ...

  4. 编写算法判别给定二叉树是否为完全二叉树_别找了,链表和二叉树相关面试题以及解答,我都给你们找好了...

    来源公众号:苦逼的码农 作者:帅地 无论是在面试还是在平时的做题中,链表相关算法题以及二叉树相关算法题,可以说是考的非常非常多的.我在 2019 的秋招面试中,也是遇到了好几次.为此,我总结了 9 道 ...

  5. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  6. 【UOJ】#246. 【UER #7】套路

    传送门http://uoj.ac/problem/246 题解很详细 第二部分的单调队列需要好好思考 #include<stdio.h> #include<cstring> # ...

  7. 计算机解决问题没有奇技淫巧,但动态规划还是有点套路

    作者 | labuladong 来源 | labuladong(ID:labuladong)  [导读]动态规划算法似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么 ...

  8. 动态规划套路在最长公共子串、最长公共子序列和01背包问题中的应用

    2019独角兽企业重金招聘Python工程师标准>>> 适合动态规划(DP,dynamic programming)方法的最优化问题有两个要素:最优子结构和重叠子问题. 最优子结构指 ...

  9. 动态规划解题套路框架

    动态规划解题套路框架 另外!!!# define maxn 100005最好多5个 509.斐波那契数 322.零钱兑换 斐波那契数 #include <iostream> #includ ...

最新文章

  1. 亚马逊:用CNN进行图像分类的Tricks
  2. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
  3. 关于jquerymobile的预加载
  4. boost::contract模块实现代码块的测试程序
  5. 中小企业项目的痛VS感人IT团队
  6. cg word List 3
  7. arcgis批量裁剪矢量模型
  8. js判断浏览器是否安装或启用了flash的方法总结
  9. neo4j︱图数据库基本概念、操作罗列与整理(一)
  10. 【对讲机的那点事】维修对讲机你会拆卸电路板上的集成电路块吗?
  11. Arduino学习笔记6
  12. qt使用QZxing生成二维码
  13. 永恒之蓝漏洞补丁-MS17010补丁列表KB号
  14. 空间换时间和时间换空间
  15. Windows + Ubuntu双系统开机选择界面美化
  16. html让光标位置,科技常识:html5中contenteditable 光标_如何设置光标位置
  17. java 获取 海康 视频流_海康网络摄像机调用SDK解码Java版
  18. 硬件安全之ARM体系架构的演进
  19. NASM汇编语言与计算机系统10-中断向量表0号中断(cli/sti/iret/hlt)
  20. Introduction to Graph Neural Network翻译-第六章 图循环网络

热门文章

  1. 第一篇JavaScript基础
  2. poj 1256 Anagram—next_permutation的神奇应用
  3. Spring AOP 实战运用
  4. .net中前台javascript与后台c#函数相互调用
  5. 免安装Mysql在Mac中的神坑之Access denied for user 'root'@'localhost' (using password: YES)
  6. html--form表单常用操作
  7. docker --- 将已有的项目发布到云端
  8. 【343天】每日项目总结系列081(2018.01.14)
  9. kindeditor用法简单介绍(转)
  10. WKInterfaceImage 无法更新图片的问题