Heating Up (单调栈,在环上选择一个点为起点,若有一边权值小于当前值,则吃掉那个点并获得相应贡献)

2023-11-19

//https://codeforces.com/gym/104064/problem/H
#include <bits/stdc++.h>
using namespace std;
#define all(a) (a).begin(), (a).end()
#define ll long long
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int N = 1e6 + 10;

#define int ll
int n, a[N];
int stk[N], val[N], head;

//将环转化成 2n 数组
//单调栈维护左边无法吃掉的值, 遍历右边
//如果右边的可以吃,则加上贡献并往左边找,左边能吃就吃,不能吃就接着往右边找
//如果右边不可以吃,则加入单调栈,并且在判下个点(右边)能不能吃时初值变成了 x (换起点)

bool check(int x)
{
    int res = x;
    head = 0;
    for(int i = 1; i <= n; i++)
    {
        if(a[i] <= res)
        {
            res += a[i];
            res = min(res, (ll)1e13 + 10);//防止爆 long long
            while(head && a[stk[head]] <= res)
            {
                res += val[stk[head]];
                res = min(res, (ll)1e13 + 10);
                head--;
            }
        }
        else
        {
            stk[++head] = i;
            val[i] = res - x + a[i];
            res = x;
        }
    }
    return head == 0;
}

void solve()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i], a[i + n] = a[i];
    n *= 2;

    int l = 0, r = 1e13 + 10, ans;
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(check(mid))
        {
            ans = mid;
            r = mid - 1;
        }
        else
            l = mid + 1;
    }

    cout << ans;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) solve(); 
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Heating Up (单调栈,在环上选择一个点为起点,若有一边权值小于当前值,则吃掉那个点并获得相应贡献) 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • CLR 2.0 与 4.0 性能比较?

    如果在 CLR 4 0 下运行 为 CLR 2 0 编译的 NET 程序会运行得更快吗 应用程序配置
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • HBase的Compact和Split源码分析与应用--基于0.94.5

    HBase的Compact和Split源码分析与应用 基于0 94 5 经过对比 0 94 5以后版本主要过程基本类似 有些新功能和细节增加 一 Compact 2 1 Compact主要来源 来自四个方面 1 Memstoreflush时
  • 数组、字符串、Math常用的API

    数组的API 方法 用法 concat 连接两个或多个数组 并返回已连接数组的副本 原数组不变 join 将数组的所有元素连接成一个字符串 返回字符串 原数组不变 toString 将数组转换为字符串 并返回结果 from 从对象创建数组
  • PID控制算法01

    PID控制算法 PID控制算法公式 原理 参数作用 PID算法及改进 两个基本类型 位置型PID控制 增量型PID控制 积分环节改进的PID控制 积分分离的PID控制 变速积分的PID控制 抗积分饱和的PID控制 微分环节改进的PID控制
  • 数据结构 --- 数组

    1 求数组中第二大的数 1 定义两个变量 2 const int MINNUMBER 32767 3 int find sec max int data int count 4 5 int maxnumber data 0 6 int se
  • 软件测试中动态测试与静态测试的区别

    这里讲一下软件测试中动态测试与静态测试的区别 静态测试主要包括 1 代码检查 代码会审 代码走查 桌面检查 2 静态结构分析 3 代码质量度量 动态测试主要包括 1 黑盒测试 又称功能测试 这种方法把被测软件看成黑盒 在不考虑软件内部结构和
  • 2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

    2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现 以心脑血管疾病 糖尿病 恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病 以下简称慢性病 已经成为影响我国居民身体健康的重要问题 随着人们生活方式的改变 慢性病的患
  • Python中的常见问题与解决方案

    机器学习作为当今最热门的领域之一 为数据科学和人工智能带来了巨大的突破和进步 然而 在Python中进行机器学习和深度学习开发时 我们可能会遇到一些常见的问题 本文将分享一些这些常见问题 并给出解决方案 帮助您更好地进行机器学习和深度学习的
  • js 正则exec()函数在循环中使用

    在每次循环中 需要把正则表达式的lastIndex重置为0 如 reg lastIndex 0
  • Swift Codable 自定义默认值解码

    前言 最近我们公司服务端修改了某个接口返回数据结构 减少了一些字段 导致iOS这边codeable解码失败 获取不到正确的数据信息 相关业务无法完成 不想使用可选值类型 可以使用属性包装器实现对基础类型的包装 decode解析时给定默认值
  • 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议101~109)

    我命由我不由天 哪吒 建议101 注意Class类的特殊性 建议102 适时选择getDeclaredXXX和getXXX 建议103 反射访问属性或方法时Accessible设置为true 建议104 使用forName动态加载类文件 建
  • CSS中设置表格TD宽度的问题

    CSS布局 表格宽度不听使唤的实例 想把表格第一例宽度设为20 其他自适应 但CSS中宽度是等宽的 只设这一行也不起作用 但是在实际应用中总是等宽处理 并不按照样式来走 XML HTML代码
  • Linux 添加ssh公钥 实现免密认证

    ssh 无密码登录要使用公钥与私钥 linux下可以用用ssh keygen生成公钥 私钥对 1 添加A服务器公钥到B服务器 2 到A服务器输入命令ssh keygen 一路回车 3 找到A服务器的 root ssh id rsa pub
  • Windows环境下3分钟就能安装一个Ubuntu

    作为一名IT人士 如果你手上没有一个私人的Linux环境是说不过去的 单独购买云服务器来搭建代价太高 用磁盘分区装双系统步骤也繁琐 那怎样在3分钟内快速搭建出一个私人的Linux环境呢 一 在Windows系统下 装Linux的常用方法是
  • Redis之hash类型

    文章目录 Redis之hash类型 1 设置一个字段 获取一个字段 2 获取所有字段值 3 判断字段是否存在 4 设置多个字段 获取多个字段 5 只获取字段名 字段值 6 获取某个key内全部数量 7 增加数字 8 删除key内字段 9 字
  • form表单传递对象数组

    ajax传递数组 form表单提交对象数组 在JSP页面开发中 我们常常会用到form表单做数据提交 由于以前一直只是使用 form表单提交单个对象 只要表单文本域的name值和接收的对象的属性名一致 那么传值就没有什么问题 不过 在前几天
  • 【狂神说Java】CSS快速入门

    目录 1 什么是CSS 11 什么是CSS 1 2 发展史 1 3 快速入门 1 4 CSS的三种导入方式 2 选择器 2 1 基本选择器 2 2 层次选择器 2 3 结构伪类选择器 2 4 属性选择器 常用 3 美化网页元素 3 1 为什
  • 【前端】菜单栏设计(html、css)

    先展示一下效果图 目录 一 代码 1 1 html 1 2 css 二 代码分析 2 1 浏览器配置 2 1 1 normalize css 2 1 2 html5shiv 2 2 html分析 2 css解析 一 代码 1 1 html
  • 源文件字符集,编译器内部字符集,执行字符集,控制台乱码问题,Qt中文问题

    源文件字符集 源文件本身也是文本文件 所以源文件字符集是指源文件保存时采用哪种字符集编码 VC 下源文件默认是gbk编码 如果想要更改 可以通过 文件 高级保存选项 修改某个源文件的编码方式 似乎没有什么选项能够设置创建项目时的源文件编码
  • 如何编写测试用例

    文章目录 测试用例的内容 等价类 边界值分析法 流程分析法 判定表法 正交试验法 测试用例的内容 用例编号 用于唯一的识别用例 能够根据用例编号识别我们测试所属的产品 模块 测试阶段等 一般格式为 A B C D A 一般用来表示产品或者项
  • Heating Up (单调栈,在环上选择一个点为起点,若有一边权值小于当前值,则吃掉那个点并获得相应贡献)

    https codeforces com gym 104064 problem H include