杂题笔记

news/2025/9/28 17:56:28/文章来源:https://www.cnblogs.com/Igunareo/p/19117316

CF2133F Flint and Steel

首先把每个能爆炸的苦力怕爆炸极限跑出来,配合苦力怕位置(核心)组一个结构体

注意到爆炸序列是合法当且仅当不存在两个被引爆的苦力怕,他们的互相包含对方的核心

那么相邻两个苦力怕存在三种合法情况,前者包含后者,后者包含前者,互不包含

\(f_i\) 为炸到 \(i\) 所需的最少苦力怕数,那么三种转移分两种优化转移:前者不包含后者,前者包含后者且后者不包含前者

各维护一棵线段树,第一种在跑到爆炸极限右端点时更新,然后在每个核心处转移。
第二种在核心处更新,在爆炸极限左端点处转移。
先转移后更新

同时为了保证合法性,进行右端点单修而非区修,防止严格更弱的区间夹在中间变出合法方案

#include<bits/stdc++.h>
#define N 500005
#define inf 100000000
using namespace std;
int x[N],L[N],R[N],num[N];
vector<int>pre[N],suf[N];
struct Ty{int u,val;}fa[N],dp[N];
Ty cmp(Ty a,Ty b){if(a.val<b.val)return a;return b;
}
bool over(int a,int b){return x[a]<x[b];}
struct Ig{Ty y[N<<2];void build(int u,int l,int r){y[u].val=inf;y[u].u=0;if(l==r)return;int mid=(l+r)/2;build(u*2,l,mid);build(u*2+1,mid+1,r);return;}void update(int u,int l,int r,int id,Ty val){if(l==r&&l==id){y[u]=cmp(val,y[u]);return;}int mid=(l+r)/2;if(id<=mid)update(u*2,l,mid,id,val);else update(u*2+1,mid+1,r,id,val);y[u]=cmp(y[u*2],y[u*2+1]);return;}Ty query(int u,int l,int r,int fl,int fr){if(l==fl&&r==fr)return y[u];int mid=(l+r)/2;if(fr<=mid)return query(u*2,l,mid,fl,fr);else if(fl>mid)return query(u*2+1,mid+1,r,fl,fr);else return cmp(query(u*2,l,mid,fl,mid),query(u*2+1,mid+1,r,mid+1,fr));}
}T1,T2;
signed main(){int T;scanf("%d",&T);while(T--){int n;Ty ans={0,inf};scanf("%d",&n);for(int i=1;i<=n;i++)fa[i]=dp[i]={0,inf};for(int i=1;i<=n;i++)scanf("%d",&x[i]);T1.build(1,1,n);T2.build(1,1,n);for(int i=1;i<=n;i++)if(x[i]>0){L[i]=max(1,i-x[i]+1);R[i]=min(n,i+x[i]-1);pre[L[i]].push_back(i);suf[R[i]].push_back(i);}for(int i=1;i<=n;i++){for(int j=0;j<pre[i].size();j++){if(i==1)fa[pre[i][j]]={0,0};else fa[pre[i][j]]=T2.query(1,1,n,max(1,i-1),R[pre[i][j]]-1);}if(x[i]>0){fa[i]=cmp(fa[i],T1.query(1,1,n,max(1,L[i]-1),R[i]));dp[i].u=i;dp[i].val=fa[i].val+1;T2.update(1,1,n,R[i],dp[i]);}for(int j=0;j<suf[i].size();j++){if(i==n)ans=cmp(ans,dp[suf[i][j]]);else T1.update(1,1,n,i,dp[suf[i][j]]);}}if(ans.val>1e7){printf("-1\n");for(int i=1;i<=n;i++){L[i]=R[i]=0;pre[i].clear();suf[i].clear();}continue;}printf("%d\n",ans.val);int top=0;int u=ans.u;while(u){num[++top]=u;u=fa[u].u;}sort(num+1,num+top+1,over);for(int i=1;i<=top;i++)printf("%d ",num[i]);printf("\n");for(int i=1;i<=n;i++){L[i]=R[i]=0;pre[i].clear();suf[i].clear();}}return 0;
}

CF2147F Exchange Queries

第一步转化:连出所有 \(p\to s,p\to p-1,s\to s-1\) 的边,那么问题就会转化成强联通缩点DAG图上可达点总数问题

第二步转化:注意到对于一条边 \((p_i,s_i)\),如果在强联通分量中存在 \(j\) 满足 \((p_i<p_j)+(s_i<s_j)=1\),那么边 \(i\)就可以合并进去,所以跑出来的 DAG 最多只有一个直接父节点和一个直接子节点,说白了就是条链

第三步转化:这玩意可以具象为两排点,对于每个 \(i\) 从上排点 \(p_i\) 向下排点 \(s_i\) 连边,那么每个强连通分量就是极大相交线段集合

第四步转化:推导一下可以发现每个极大相交线段集合包含的上下排点都正好填满一个连续段,那么只需要求出每个连续段的右端点即可

维护:显然的,对于边 \((p_i,s_i)\)\(p_i\sim s_i-1\) 都不能成为合法右端点,那么我们可以对这部分区间 +1,那么右端点集就是 0 构成的集合,在线段树上标记永久化再加上维护区间内答案,区间左右极值 0 就可以做了

#include<bits/stdc++.h>
#define int long long
#define N 100005
using namespace std;
struct Ty{int u,v,id;}x[N];
struct Ig{int tag,val,l,r;}y[N*4];
void build(int u,int l,int r){y[u].val=(r-l)*(l+r+1)/2;y[u].tag=0;y[u].l=l;y[u].r=r;if(l==r)return;int mid=(l+r)/2;build(u*2,l,mid);build(u*2+1,mid+1,r);return;
}
void update(int u,int l,int r,int fl,int fr,int val){if(l==fl&&r==fr){y[u].tag+=val;if(y[u].tag)y[u].val=y[u].l=y[u].r=0;else if(l==r){y[u].val=0;y[u].l=y[u].r=l;}else{y[u].val=y[u*2].val+y[u*2+1].val;y[u].l=y[u*2].l?y[u*2].l:y[u*2+1].l;y[u].r=y[u*2+1].r?y[u*2+1].r:y[u*2].r;if(y[u*2].r&&y[u*2+1].l)y[u].val+=(y[u*2+1].l-y[u*2].r)*y[u*2+1].l;}return;}int mid=(l+r)/2;if(fr<=mid)update(u*2,l,mid,fl,fr,val);else if(fl>mid)update(u*2+1,mid+1,r,fl,fr,val);else{update(u*2,l,mid,fl,mid,val);update(u*2+1,mid+1,r,mid+1,fr,val);}if(y[u].tag)y[u].val=y[u].l=y[u].r=0;else{y[u].val=y[u*2].val+y[u*2+1].val;y[u].l=y[u*2].l?y[u*2].l:y[u*2+1].l;y[u].r=y[u*2+1].r?y[u*2+1].r:y[u*2].r;if(y[u*2].r&&y[u*2+1].l)y[u].val+=(y[u*2+1].l-y[u*2].r)*y[u*2+1].l;}return;
}
signed main(){int T;scanf("%lld",&T);while(T--){int n,q;scanf("%lld%lld",&n,&q);for(int i=1;i<=n;i++)scanf("%lld",&x[i].u);for(int i=1;i<=n;i++)scanf("%lld",&x[i].v);build(1,1,n);for(int i=1;i<=n;i++)if(x[i].u<x[i].v)update(1,1,n,x[i].u,x[i].v-1,1);while(q--){int op;scanf("%lld",&op);if(op==1){int u,v;scanf("%lld%lld",&u,&v);if(x[u].u<x[u].v)update(1,1,n,x[u].u,x[u].v-1,-1);if(x[v].u<x[v].v)update(1,1,n,x[v].u,x[v].v-1,-1);swap(x[u].u,x[v].u);if(x[u].u<x[u].v)update(1,1,n,x[u].u,x[u].v-1,1);if(x[v].u<x[v].v)update(1,1,n,x[v].u,x[v].v-1,1);}else{int u,v;scanf("%lld%lld",&u,&v);if(x[u].u<x[u].v)update(1,1,n,x[u].u,x[u].v-1,-1);if(x[v].u<x[v].v)update(1,1,n,x[v].u,x[v].v-1,-1);swap(x[u].v,x[v].v);if(x[u].u<x[u].v)update(1,1,n,x[u].u,x[u].v-1,1);if(x[v].u<x[v].v)update(1,1,n,x[v].u,x[v].v-1,1);}printf("%lld\n",y[1].val+y[1].l*y[1].l);}}return 0;
}

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

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

相关文章

HyperWorks许可证服务器配置

在复杂的工程设计和仿真环境中,高效、稳定的许可证服务器配置是确保团队顺畅协作、资源最大化利用的关键。HyperWorks作为业界领先的工程仿真软件,提供了灵活、可靠的许可证服务器配置方案,帮助用户轻松管理许可证资…

算法篇

算法 Algorithm 模拟 Simulation 模拟是基础,体现出你的代码能力,同时也考察你的阅读理解,以及情况是否考虑清楚 基本功:字符串输入[蓝桥杯 2022 国 AC] 内存空间 计算某年某月某日是星期几:如果纯模拟非常麻烦,…

企业网站设计模板免费下载夜间直播平台排行榜前十名

1、前言 本章将介绍yolov5的改进项目,为v5增加新的模块---注意力机制、SE模块 大部分更改的代码是重复的,只有少部分需要更改,下面会详细讲解 yolov5的yaml文件介绍:YOLOV5 模型:利用tensorboard查看网络结构和yaml文件介绍-CSDN博客 yolov5的模块更改,C3更改为C2f模块…

广东省建设厅投诉网站服务器网站过多对排名

无符号文件的驱动中断DriverEntry方法 当我们调试有符号的windows驱动时&#xff0c;通常可以使用bu module!DriverEntry, 在模块的DriverEntry位置打上断点。 那么对于无符号驱动&#xff0c;应该如何找到DriverEntry函数的位置呢&#xff1f; 从正常的DriverEntry的调用栈…

帮网站做代理怎么在网上做广告宣传

导读&#xff1a;面向应用工程师的商业软件咨询、自研软件定制开发服务的仿真公众号&#xff0c;点击关注进入菜单&#xff0c;查看更多精彩内容。(三)如何实现多核并行计算呢&#xff1f;了解了多核、多Machine、多Rack后&#xff0c;我可以看一下软件(程序)是如何对这些资源进…

网站备案用座机租用办公空间设计主题名称

&#x1f449;原文阅读 &#x1f4a1;章前提示 本文采用8084端口进行连接&#xff0c;是EMQX 默认提供了四个常用的监听器之一&#xff0c;如果需要添加其他类型的监听器&#xff0c;可参考官方文档&#x1f517;管理 | EMQX 文档。 本文使用自签名CA&#xff0c;需要提前在L…

2025 年二氧化氯发生器厂家最新权威推荐排行榜:TOP 级企业技术实力与成本优势解析,助力用户精准选购电解法二氧化氯发生器/电解食盐二氧化氯发生器厂家推荐

随着水处理行业对消毒环节的重视程度不断提升,二氧化氯发生器作为核心消毒设备,其市场需求持续增长。但当前市场中品牌数量众多,产品质量差异显著,部分设备存在技术落后、运行成本高、维护困难等问题,甚至无法满足…

如何找到当前计算机所有的UnrealEngine安装位置

使用UnrealEngine主要有两种方式:1.通过EpicGameLauncher安装 2. 通过源代码自行编译。 1. 通过EpicGameLauncher安装时,安装的版本和安装位置记录在注册表的这个位置:HKEY_LOCAL_MACHINE\SOFTWARE\EpicGames\Unrea…

阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施

随着大模型技术的飞速发展,我们正从云原生时代迈向一个全新的 AI 原生应用时代。智能体(Agent)作为能够自主理解、决策并执行任务的全新应用范式,正在重塑软件的定义。然而,在生产环境中规模化落地 Agent 面临着开…

配电网一次设备

配电网一次设备包括:变压器、断路器、负荷开关、隔离开关、熔断器、电压互感器电流互感器等。1、配电网自动化对一次设备的要求:(1)需要实现遥信功能的开关设备,应至少具备一组辅助触点;需要实现遥测功能的一次设…

Visual Studio 项目中常用的Properties

PropertyExpands ToExample (Debug build of xxx)$(ProjectDir) Full path to the project folder (with trailing \) C:\Repos\xxx\$(SolutionDir) Full path to the solution folder (with trailing \) C:\Repos\xxx…

英文网站群建设平面设计广告设计培训班

在使用CMutex过程中&#xff0c;看到别人使用了CSingleLock类&#xff0c;想着明明CMutex已经可以实现线程同步了&#xff0c;为什么还有使用CSingleLock类呢&#xff1f; 在MFC中&#xff0c;虽然CMutex类本身可以实现线程同步&#xff0c;但通常会与CSingleLock类一起使用&am…

winform 烦人的键盘事件 再遇上 chart 上下左右 失灵

AI 用多了会失去思考耐心using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading…

2025 年铝板品牌最新权威推荐排行榜:1-7 系主流铝板企业 TOP5 精选及工艺品质测评指南1060/1100/3003/3004/5052/6061/6063/6082铝板厂家推荐

在工业制造、建筑装饰、交通运输等领域高速发展的当下,铝板作为核心基础材料,其品质直接决定终端产品的稳定性与使用寿命。当前市场铝板品牌繁杂,部分企业因原材料把控松散、生产工艺落后,导致产品尺寸偏差大、表面…

大型语言模型(LLM)分类与特性全解析 - 教程

大型语言模型(LLM)分类与特性全解析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

一只手都数的过来

“一只手都数的过来”。那么一只手能数多少个数呢?假设我们一只手有 \(5\) 根手指头,那么最多只能数 \(5\) 个数吗?每只手指头有两种状态——伸出或者不伸出,实际上,可以数出 \(2^5=32\) 个数。那么为什么我们平常…

环保网站源码创建全国文明城市主题班会教案

一次配置Docker环境的完整记录 Docker环境搭建报错与解决报错一报错二报错三 Docker环境搭建 本节介绍了一次配置docker环境的完整记录&#xff1a; 编写Dockerfile文件&#xff1a; FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.l…

做防水广告在哪个网站最好邢台市建设工程质量监督网站

r e p l a c e W i t h ‘ 可以将输入文档替换为指定的文档。该操作可以替换输入文档的所有字段&#xff0c;包括 ‘ i d ‘ 字段。使用 ‘ replaceWith可以将输入文档替换为指定的文档。该操作可以替换输入文档的所有字段&#xff0c;包括_id字段。使用 replaceWith‘可以将输…

做网站和做阿里巴巴wordpress 自动安装 插件

前言&#xff1a; 在以前传统Spring去做Java开发中&#xff0c;大量 XML文件存在项目中&#xff0c;导致项目变得笨重繁琐、开发和部署效率也降低。前几年推出的SpringBoot 提升了Spring 开发者体验。集成了大量常用第三方库配置、零配置开箱即用、让大家更加专注于业务逻辑。同…

网站设计开发环境网站主机设置方法

为了精准、稳定地提取滚动轴承故障特征&#xff0c;提出了基于变分模态分解和奇异值分解的特征提取方法&#xff0c;采用标准模糊C均值聚类(fuzzy C means clustering, FCM)进行故障识 别。对同一负荷下的已知故障信号进行变分模态分解&#xff0c;利用 奇异值分解技术进一步提…