当前位置: 首页 > news >正文

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);}}
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 入门指南:Java 8 新特性 —— Stream 流
  • golang操作mysql利器-gorm
  • 大学生必看!60万人在用的GPT4o大学数学智能体有多牛
  • 大数据新视界 --大数据大厂之 Node.js 与大数据交互:实现高效数据处理
  • Codeforces Round 973 (Div. 2) - D题
  • 数据库事务中的四大问题:脏读、脏写、不可重复读与幻读详解
  • 【HTTPS】对称加密和非对称加密
  • RocketMQ控制台手动新增主题,报错:clusterName or brokerName can not be all blank
  • 【设计模式-备忘录】
  • Redisson 总结
  • 目前主流语言比较
  • Alluxio EnterpriseAI on K8s 部署教程
  • 探索 Python 的火焰:Fire 库的神秘力量
  • 2016年国赛高教杯数学建模A题系泊系统的设计解题全过程文档及程序
  • 前端开发——(1)使用vercel进行网页开发
  • [case10]使用RSQL实现端到端的动态查询
  • AngularJS指令开发(1)——参数详解
  • CSS中外联样式表代表的含义
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Quartz初级教程
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Vim Clutch | 面向脚踏板编程……
  • 包装类对象
  • 对象引论
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给github项目添加CI badge
  • 关于List、List?、ListObject的区别
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 跨域
  • 浏览器缓存机制分析
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 时间复杂度与空间复杂度分析
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过git安装npm私有模块
  • 一个项目push到多个远程Git仓库
  • 用mpvue开发微信小程序
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #APPINVENTOR学习记录
  • #Linux(权限管理)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #每日一题合集#牛客JZ23-JZ33
  • (C语言)共用体union的用法举例
  • (floyd+补集) poj 3275
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二)测试工具
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (三) diretfbrc详解
  • (十)Flink Table API 和 SQL 基本概念
  • (数据结构)顺序表的定义