Lanterns (dp 紫 线段树 二分 维护dp)

Lanterns - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

让所有点被覆盖,那么状态可以设计成覆盖一段前缀,并且中间不允许出现断点

由于CF崩了,所以暂时没提交代码。

记f(i) 为前 i 个灯笼点亮的最长前缀。

由于答案具有保留性,所以单调性成立。

由此推转移方程。

共鸣:i 与 t (i > t) 号灯,可以完全覆盖1至i ,条件 f(t)>= i - a[i] -1 至少自给自足。

max_range(l,r) 区间[l,r]最大的i + a[i]

  • f(i) = f(i-1) 如果前i-1盏灯无法覆盖i
  • 反之则让f(i) = max(f(i-1),i+a[i])
  • 第三种情况,二分找最早的共鸣点 取max(i-1,max_range(t+1,i-1))

对于第二种情况,我们在3中特判。

from i :i如果往左看,from i 到 i-1 就向右看。

如果要回退,即L则让from i  = t;因为第一个可能不向右看的就是

t+1,i之内的都向右看,倒着赋值即可。

AC 代码

#include<bits/stdc++.h>
using namespace std;
struct node{int id,mx;
};
struct sgt{int a[1000100];int mx[4000100];int id[4000100];void build(int p,int l,int r){if(l == r){mx[p] = a[l];id[p] = l;return;}int mid = (l+r)/2;build(p*2,l,mid);build(p*2+1,mid+1,r);if(mx[p*2]>mx[p*2+1]){mx[p] = mx[p*2];id[p] = id[p*2];}else{mx[p] = mx[p*2+1];id[p] = id[p*2+1];}}void update(int p,int L,int R,int ID,int x){if(L == R){mx[p] = x;return;}int mid = (L+R)/2;if(ID <= mid)update(p*2,L,mid,ID,x);else update(p*2+1,mid+1,R,ID,x);if(mx[p*2]>mx[p*2+1]){mx[p] = mx[p*2];id[p] = id[p*2];}else{mx[p] = mx[p*2+1];id[p] = id[p*2+1];}}node query(int p,int L,int R,int l,int r){if(l > r)return node{0,0};if(l == L&&R == r){return node{id[p],mx[p]};}int mid = (L+R)/2;if(r <= mid){return query(p*2,L,mid,l,r);}else if(l > mid){return query(p*2+1,mid+1,R,l,r);}else{node LL = query(p*2,L,mid,l,mid);node RR = query(p*2+1,mid+1,R,mid+1,r);if(LL.mx > RR.mx){return LL;}else{return RR;}}}int found(int l,int r,int L,int R,int q){if(query(1,L,R,l,r).mx < q)return -1;if(l == r)return l;int mid = (l+r)/2;int Lrange = query(1,L,R,l,mid).mx;int Rrange = query(1,L,R,mid+1,r).mx;if(Lrange < q&& Rrange < q){return -1;}else if(Lrange >= q){return found(l,mid,L,R,q);}else{return found(mid+1,r,L,R,q);}}
}t1,t2;
int t;
int a[300010];
int f[300010];
char res[300010];
int from[300010];
int main(){cin>>t;while(t--){int n;cin>>n;for(int i = 1;i <= n;i++){cin>>a[i];f[i] = 0;t2.a[i] = i + a[i];t1.a[i] = 0;}t1.build(1,1,n);//维护f it2.build(1,1,n);//维护i + a[i]f[0] = f[1] = 0;for(int i = 2;i <= n;i++){if (!a[i]) { f[i] = f[i - 1];from[i] = i; continue; }int t = lower_bound(f, f + i, i - a[i] - 1) - f;//找最早的共鸣点from[i] = t;//Lif (t == i) f[i] = f[i - 1];//else{f[i] = max(i-1, t2.query(1,1,n,t+1,i-1).mx);if (f[i - 1] > f[i]) f[i] = f[i - 1], from[i] = i;//Rif (f[i - 1] >= i && i + a[i] > f[i]) {f[i] = i + a[i];from[i] = i;//R}}}if(f[n] < n){cout<<"NO"<<endl;}else {puts("YES");int cur = n;while (cur) {if (from[cur] == cur) res[cur] = 'R', --cur;else {res[cur] = 'L';fill(res + from[cur] + 1, res + cur, 'R');cur = from[cur];}}res[n + 1] = 0; puts(res + 1);}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542006.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

24年研赛-华为杯数模竞赛D题论文首发+代码分享

本届研赛助攻题目 C D F三题论文均已经全部完成。后更新计划 如图所示。 免费给大家分享 三个问题的论文部分代码 2024年华为杯-研赛分享资料&#xff08;论文部分代码&#xff09;&#xff08;已更新部分代码&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com…

【Vue系列五】—Vue学习历程的知识分享!

前言 本篇文章讲述前端工程化从模块化到如今的脚手架的发展&#xff0c;以及Webpack、Vue脚手架的详解&#xff01; 一、模块化 模块化就是把单独的功能封装到模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但可以通过特定的接口公开内部成员…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…

动手学深度学习(李沐)PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…

数模打怪(九)之线性规划、非线性规划、多目标规划

一、线性规划 1、问题特征&#xff1a;有限的条件下&#xff0c;最大的收益 怎样分配&#xff0c;使……尽量多&#xff08;少&#xff09;&#xff0c;使利润最多&#xff0c;使最合理 变量都是一次项&#xff08;x&#xff09; 2、三个要素&#xff1a;决策变量、目标函数…

docker技术(上)

一、docker简介 Docker 是一个开源的应用容器引擎&#xff0c;于 2013 年由 Solomon Hykes 推出并开源。它基于 Go 语言开发&#xff0c;遵从 Apache2.0 协议。Docker 可以让开发者将应用及其依赖包打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 或 Windows…

工程师 - Windows下打开PowerShell和CMD Prompt的若干方法

打开PowerShell 在Windows中&#xff0c;你可以通过以下几种方式来打开PowerShell&#xff1a; 1. 开始菜单&#xff08;Start Menu&#xff09;&#xff1a;点击“开始”按钮&#xff0c;然后在搜索栏中输入“PowerShell”。在搜索结果中&#xff0c;选择“Windows PowerShell…

【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)

文章目录 一、人员管理1、需求说明2、生成基础代码&#xff08;1&#xff09;创建目录菜单&#xff08;2&#xff09;添加数据字典&#xff08;3&#xff09;配置代码生成信息&#xff08;4&#xff09;下载代码并导入项目 3、人员列表改造&#xff08;1&#xff09;基础页面&a…

最新免费域名申请

在互联网时代&#xff0c;每个码农都想拥有一个免费的域名&#xff0c;方便开发调试&#xff0c;也可用作自己网站等。如何申请一个免费的域名&#xff0c;时间上先错过了freenom&#xff0c;后面又错过nic.eu.org申请(现在申请时间长且很难通过)&#xff0c;直到最近又有免费的…

计算机网络(八) —— Udp协议

目录 一&#xff0c;再谈端口号 1.1 端口号 1.2 netsta命令 二&#xff0c;UDP协议 2.1 关于UDP 2.2 Udp协议格式 2.3 Udp协议特点 2.4 Udp的缓冲区 一&#xff0c;再谈端口号 http协议本质是“请求 - 响应”形式的协议&#xff0c;但是应用层需要先将数据交给传输层&…

pthread_cond_signal 和pthread_cond_wait

0、pthread_join()函数作用&#xff1a; pthread_join() 函数会一直阻塞调用它的线程&#xff0c;直至目标线程执行结束&#xff08;接收到目标线程的返回值&#xff09;&#xff0c;阻塞状态才会解除。如果 pthread_join() 函数成功等到了目标线程执行结束&#xff08;成功获取…

(Python) Structured Streaming读取Kafka源实时处理图像

Producer.py import cv2 from kafka import KafkaProducer import os import os.path as osp# Kafka 服务器地址 bootstrap_servers [xxx.xxx.xxx.xxx:9092] #terminal运行ifconfig可以查看localhost# 创建 Kafka 生产者 producer KafkaProducer(bootstrap_serversbootstrap…

什么是 GPT?通过图形化的方式来理解 Transformer 架构

Predict, sample, repeat 预测、取样、重复 GPT 是 Generative Pre-trained Transformer 的缩写。首个单词较为直接&#xff0c;它们是用来生成新文本的机器人。“Pre-trained” 指的是模型经历了从大量数据中学习的过程&#xff0c;这个词暗示了该模型还有进一步在特定任务中…

开关柜设备红外检测数据集

开关柜设备红外检测数据集 包含以下2个数据文件&#xff1a; /train&#xff1a;训练集 /valid&#xff1a;验证集 /test&#xff1a;测试集 README.txt&#xff1a;数据说明 【数据说明】检测目标以Pascal VOC格式进行标注&#xff0c;对每个图像进行以下预处理&#xff0c;统…

极度精简 Winows11 系统镜像!Tiny11 2311下载 - 支持苹果 M 芯片 Mac 安装 (ARM 精简版)!

最新推出的 Tiny11 是一款极端精简版 Windows 11 系统镜像&#xff0c;针对苹果 M 芯片 Mac 用户&#xff08;ARM 架构&#xff09;提供良好支持。Tiny11 内置了众多优化特性&#xff0c;如更小的安装体积和更快的启动速度&#xff0c;特别适合有特殊需求或老机型的用户。用户可…

华为HarmonyOS地图服务 7- 在地图上绘制标记

场景介绍 本章节将向您介绍如何在地图的指定位置添加标记以标识位置、商家、建筑等。 点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。Map Kit提供的点标记功能(又称 Marker)封装了大量的触发事件,例如点击事件、长按事件、…

基于YOLO算法的网球运动实时分析-击球速度测量-击球次数(附源码)

这个项目通过分析视频中的网球运动员来测量他们的速度、击球速度以及击球次数。该项目使用YOLO&#xff08;You Only Look Once&#xff09;算法来检测球员和网球&#xff0c;并利用卷积神经网络&#xff08;CNNs&#xff09;来提取球场的关键点。此实战项目非常适合提升您的机…

VsCode C语言 SDL包配置 2024.9

写这篇文章的起因是&#xff0c;最近我需要使用 SDL 包&#xff0c;我懒得下载V-studio ,所以直接在VsCode 里配置C环境。我搞了好几个小时&#xff0c;啥都弄好了&#xff0c;但是一直被下面几个问题缠绕导致demo启动不了&#xff0c;现在我记录一下这奇葩的解决过程。所有路径…

Qt Debugging帮助文档

Qt中给断点添加条件&#xff1a; 示例1&#xff1a; 当i10时&#xff0c;程序中断 但不知道为什么&#xff0c;46行的条件没有生效&#xff0c;47行的条件生效了 给断点添加忽略次数&#xff1a; 在程序停止之前忽略该断点200次。 Breakpoints (Debugging with GDB)

Apache Doris 实践

Apache Doris 实践 官方使用指南&#xff1a;https://doris.incubator.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/ 手动安装 下载二进制安装包https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.5-bin-x64.tar.gz …