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

E. 23 Kingdom【Codeforces Round 1024 (Div. 2)】

E. 23 Kingdom

在这里插入图片描述

思路:

这道题的核心在于如何构造一个数组b,使得每个数的最远两个出现位置之差总和最大。通过分析,我们发现要最大化总美丽值,应尽可能让每个数的首次出现尽可能靠左、末次出现尽可能靠右。这样每个数的距离贡献j-i会尽可能大。

为了实现这一点,采用贪心策略:双指针从左右两端向中间扫描,每次尝试为当前左指针位置的数a[l]寻找一个右端的配对a[r]。若这两个位置的数值在各自的可用范围内未被使用过,则将它们的间距r-l累加到答案中,并标记这些位置已被使用。重复此过程直到所有可能的配对被处理完毕。

具体实现中,使用并查集(路径压缩优化)来高效管理每个数值的可用左右端点。bookl数组记录每个数值当前可用的最左端点(初始为自身位置),当该位置被使用后,更新为前一个位置。同理,bookr数组记录每个数值当前可用的最右端点。每次配对成功时,更新相应的并查集结构,确保后续查找能快速找到下一个可用端点。

这种贪心策略确保了每次选择的配对间距尽可能大,从而总和达到最大。通过并查集的高效管理,算法的时间复杂度为线性,适用于大规模数据。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
#define int long long
#define pb push_back
#define pii pair<int,int>
#define FU(i, a, b) for(int i = (a); i <= (b); ++ i)
#define FD(i, a, b) for(int i = (a); i >= (b); -- i)
const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const int maxn= 5e5+5,MAXN = maxn;
int a[200005],b[200005],c[200005];
int bookl[200005],bookr[200005];
int find(int x,int book[]){if(x==book[x]) return x;return book[x] = find(book[x],book);
}void solve() {int n;cin>>n;int ans=0,l=1,r=n;for(int i=1;i<=n;i++){cin>>a[i];bookl[i]=bookr[i]=i;}while(l<r){while(l<r&&find(a[l],bookl)==0) l++;while(l<r&&find(a[r],bookr)==0) r--;if(l<r){ans+=r-l;int lt=find(a[l],bookl),rt=find(a[r],bookr);bookl[lt]=lt-1;bookr[rt]=rt-1;l++,r--;}}cout<<ans<<endl;
}	signed main() {
#ifdef ONLINE_JUDGE
#elsefreopen("../in.txt", "r", stdin);
#endifcin.tie(0)->ios::sync_with_stdio(0);int T = 1;cin >> T;while (T--) {solve();}return 0;
}	
http://www.xdnf.cn/news/6309.html

相关文章:

  • 1669上什么课
  • day29-IO(其他流)
  • Java基础(多线程1)
  • 鸿蒙-5.1.0-release构建编译环境
  • 分割等和子集习题分析
  • HCIP(OSPF的拓展配置及选路规则)
  • 矩阵乘法的优化与复杂度分析
  • 一个日志量突增的问题分析处理经历
  • 普通IT的股票交易成长史--20250514复盘
  • 机器学习任务的常用评估指标
  • JVM内存模型
  • 前端面试题:vue3 为什么不需要时间分片?
  • Linux程序设计--期末复习
  • 企业网络新选择:软件定义架构下的MPLS
  • 【Docker】Windows10环境下安装DockerDesktop
  • TCP 三次握手建立连接详解
  • C2S-Scale:Cell2Sentence v2
  • 在星河社区学习PARL使用强化学习来训练AI
  • C#高级编程:IO和序列化
  • linux内核主要由哪五个模块构成?
  • ultralytics 中的 RT-DETR 之 模型结构解析
  • 【python机器学习】Day 25 异常处理
  • 吴恩达机器学习笔记:多变量梯度下降
  • Permission Denied Error on Port 6277 When Starting MCP
  • 彻底解决QT5 中文编译不过问题
  • HCIP-Datacom Core Technology V1.0_1认识网络设备
  • 【unity游戏开发——编辑器扩展】EditorWindow自定义unity窗口拓展
  • AI-02a5a6.神经网络-与学习相关的技巧-批量归一化
  • Spring Boot拦截器详解:原理、实现与应用场景
  • centos7忘记root密码后使用单用户模式重置