【模板】李超线段树 / [HEOI2013] Segment

news/2025/2/26 15:18:12/文章来源:https://www.cnblogs.com/watersail/p/18738555

在一些特殊的题目中,可以使用“标记永久化”代替标记的下传,但应用的局限性很大

  • 在本题中,永久化的标记就是线段树所需要维护的信息,通过沿路比较得到单点查询的答案。在某个区间内,对于两条相交的线段,将其中更可能优的一条录入区间,将另外一条下传到其中一个子区间,就保证了log方的修改时间复杂度。
#include <bits/stdc++.h>
using namespace std;
const int mod1=39989,mod2=1000000000;
struct seg
{int x0,y0,x1,y1;double calc(double x){if(x0==x1){return y1;}return y0+(x-x0)/(x1-x0)*(y1-y0);}
}s[100005];
int tot;
struct t1
{int l,r,v;
}t[200005];
void build(int p,int l,int r)
{t[p].l=l;t[p].r=r;t[p].v=0;if(l==r){return;}int mid=(l+r)>>1;build(p*2,l,mid);build(p*2+1,mid+1,r);
}
const double eps=1e-9;
void change(int p,int l,int r,int x)
{int mid=(t[p].l+t[p].r)>>1;if(l<=t[p].l&&r>=t[p].r){if(fabs(s[x].calc(mid)-s[t[p].v].calc(mid))<eps&&x>t[p].v){swap(x,t[p].v);}else if(s[x].calc(mid)<s[t[p].v].calc(mid)){swap(x,t[p].v);}if(fabs(s[x].calc(t[p].r)-s[t[p].v].calc(t[p].r))<eps&&t[p].v<x){change(p*2+1,l,r,t[p].v);t[p].v=x;}else if(s[x].calc(t[p].r)<s[t[p].v].calc(t[p].r)){change(p*2+1,l,r,t[p].v);t[p].v=x;}else if(fabs(s[x].calc(t[p].l)-s[t[p].v].calc(t[p].l))<eps&&t[p].v<x){change(p*2,l,r,t[p].v);t[p].v=x;}else if(s[x].calc(t[p].l)<s[t[p].v].calc(t[p].l)){change(p*2,l,r,t[p].v);t[p].v=x;}else{t[p].v=x;}return;}if(l<=mid){change(p*2,l,r,x);}if(r>mid){change(p*2+1,l,r,x);}
}
int ask(int p,int x)
{if(t[p].l==t[p].r){return t[p].v;}int mid=(t[p].l+t[p].r)>>1,va;if(x<=mid){va=ask(p*2,x);}else{va=ask(p*2+1,x);}if(fabs(s[t[p].v].calc(x)-s[va].calc(x))<eps){return min(t[p].v,va);}else if(s[t[p].v].calc(x)>s[va].calc(x)){return t[p].v;}else{return va;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int n;cin>>n;s[0].x0=1;s[0].x1=mod1;s[0].y0=s[0].y1=0;build(1,1,mod1);int lastans=0;for(int i=1;i<=n;i++){int opt;cin>>opt;if(opt==0){int k;cin>>k;lastans=ask(1,(k+lastans-1)%mod1+1);cout<<lastans<<"\n";}else{tot++;cin>>s[tot].x0>>s[tot].y0>>s[tot].x1>>s[tot].y1;s[tot].x0=(s[tot].x0+lastans-1)%mod1+1;s[tot].y0=(s[tot].y0+lastans-1)%mod2+1;s[tot].x1=(s[tot].x1+lastans-1)%mod1+1;s[tot].y1=(s[tot].y1+lastans-1)%mod2+1;if(s[tot].x0>s[tot].x1){swap(s[tot].x0,s[tot].x1);swap(s[tot].y0,s[tot].y1);}change(1,s[tot].x0,s[tot].x1,tot);}}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DeepSeek部署实战】正点原子RK3588开发板本地化部署DeepSeek R1 大模型视频教程来啦!

【视频发布】正点原子RK3588开发板本地化部署DeepSeek R1 大模型视频系列视频教程来啦!一、课程内容 承接上一次板端部署DeepSeek R1大模型的文档教程,应粉丝们的要求,本次推出视频教程,手把手教学实现端侧部署,无需依赖云端服务器即可本地化处理数据,功耗更低、成本更优…

接口新特性--java进阶day03

1.接口新特性 在JDk8和JDK9开始,接口可以定义普通方法这时就会感到很奇怪,明明之前说好接口只是用来制定规则的,为什么现在又可以定义普通方法了呢? 我们以一个公司案例进行讲解,公司1.0上线了接口,之后有新项目,要更新接口,但我们都知道,接口如果写了新的方法,之前所…

MySQL之navicat使用

1、下载navicat 包2、解压 3、找到navicat.exe 4 .密钥:NAVH-WK6A-DMVK-DKW3 5、查看ip地址6、关闭防火墙:ervice iptables stop7、连接配置编写 8、点击确定连接,显示如下 9、打开查询中,新建查询10、解决问题: 注意点:如果连接不上 1、关闭防火墙 service iptables …

Powershell实现圆缩小放大 (实时刷新窗口)

使用Powershell,创建实时刷新的窗口,绘制图形,这里以圆作为例子,做缩小放大动画。【分析】 Powershell是windows内置的自动部署平台,功能强大在于可以调取.net框架,因此,即使没有Opengl加持,也可以创建实时刷新的窗口。可以调用windows.Form程序集创建窗口,然后调用Sy…

LGP8125 [BalticOI 2021] The short shank 学习笔记

LGP8125 [BalticOI 2021] The short shank 学习笔记 Luogu Link 题意简述 有一列 \(N\) 个元素,第 \(i\) 个元素初始值 \(t_i\),而后会被更新为 \(\min_{j=lb=1}^{rb=i} t_j+(i-j)\)。现在给你 \(D\) 个隔板,如果在第 \(i\) 个和第 \(i+1\) 个之间放置,则有效果:\(\forall…

PPO和GRPO算法详解(持续更新中)

PPO 众所周知,PPO在LLM应用下, t时刻下,State就变成了query+output(<t) Reference是初始模型,举个例子可以认为是deepseek V3+SFT之后的模型,是不变的,是fozen model 从头开始推导一次: t0时刻:query输入到policy model里面,生成一个token,记为o1Reeference model…

ATR143B Counting Grids 学习笔记

ATR143B Counting Grids 学习笔记 Luogu Link 题意简述 现在需要将 \(1\sim n^2\) 共 \(n^2\) 个整数填进网格 \(S\)。定义一种方案合法当且仅当不存在 \(S_{i,j}\) 满足: \[\max_{k=1}^n S_{i,k}=\min_{k=1}^n S_{k,j}=S_{i,j} \]。问合法方案数,答案对 \(998244353\) 取模。…

win11解决任务栏卡死问题

1、以管理员方式启动 windows PowerShell 2、执行代码 Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} sfc /scannow出现下面信息重启电脑即可。

轻松搞定电脑文件对比,BeyondCompare

点击上方蓝字关注我 前言 Beyond Compare 是一种文件比较工具。把选中的文件夹或文件并排展示两个窗口,可以使用不同筛选查看文件夹信息。 可以查看所有文件、匹配的文件、不匹配的文件等,根据不同的颜色来区别以便轻松辨识。通过其他功能还包括二进制文件的快速比较、文件和…

BUUCTF-PWN-ciscn_2019_c_1

这道题又是新的题型,研究了以下,要好好记录下来。 首先是看程序开启了哪些保护:发现没开启栈溢出保护,我们继续往下看程序的逻辑:一个简洁的页面,到此为止我们并不能看出可以利用哪些攻击方式,我们跟踪一下函数encrypt和begin发现begin只是一个简单的显示程序,而重点在…

Windows API 学习~

Win32~用api 创建一个Windows 窗口 windows窗口创建过程 Windows API 索引 - Win32 apps | Microsoft Learn 创建项目 ​ 配置属性,系统里面子系统选择窗口 ​ ‍注册窗口类: 首先需要调用RegisterClassEx 函数来注册一个窗口类,该函数会向操作系统注册一个新的窗口类, 并返…

个人开发者神器:5款高效的项目管理工具推荐

作为个人开发者,高效的项目管理是确保工作顺利进行的关键。在众多的项目管理工具中,轻量级的 APP 因其便捷性和实用性备受青睐。本文将为您推荐 5 款个人开发者的神器——轻量级项目管理 APP,帮助您提升工作效率,更好地实现项目目标。 禅道项目管理软件 禅道是一款专业且开…