首页 > 其他分享 >G. The Great Equalizer

G. The Great Equalizer

时间:2023-08-31 09:22:25浏览次数:37  
标签:Equalizer Great insert int auto add prev extract

G. The Great Equalizer

通过分析之后得知,每次询问的答案就是当前数组中的最大值和当下数组排序后相邻元素差值的最大值之和。

接下来考虑如何维护数组。这会想到用一颗二叉平衡搜索树来实现。这样的一颗树在STL里已经用multiset封装好了,直接使用即可。

创建两个辅助函数add(int x) 和del(int x),表示数组中的元素改变。

jls的代码。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 void solve(){
 5     int n;
 6     cin >> n;
 7     vector<int> a(n);
 8     for(int i = 0; i < n; i++){
 9         cin >> a[i];
10     }
11 
12     multiset<int> s, d{0};
13     auto add = [&](int x){
14         auto it = s.insert(x);
15         auto r = next(it);
16         if(it != s.begin()){
17             d.insert(x - *prev(it));
18         }
19         if(r != s.end()){
20             d.insert(*r - x);
21         }
22         if(it != s.begin() && r != s.end()){
23             d.extract(*r - *prev(it));
24         }
25     };
26     auto del = [&](int x){
27         auto it = s.find(x);
28         auto r = next(it);
29         if(it != s.begin()){
30             d.extract(x - *prev(it));
31         }
32         if(r != s.end()){
33             d.extract(*r - x);
34         }
35         if(it != s.begin() && r != s.end()){
36             d.insert(*r - *prev(it));
37         }
38         s.extract(x);
39         //s.erase(it);
40     };
41 
42     for(int i = 0; i < n; i++){
43         add(a[i]);
44     }
45 
46     int q;
47     cin >> q;
48     while(q--){
49         int i, x;
50         cin >> i >> x;
51         i--;
52         del(a[i]);
53         a[i] = x;
54         add(a[i]);
55         int ans = *s.rbegin() + *d.rbegin();
56         cout << ans << " ";
57     }
58     cout << endl;
59 }
60 
61 int main(){
62     int t;
63     cin >> t;
64     while(t--){
65         solve();
66     }
67     return 0;
68 }

 

标签:Equalizer,Great,insert,int,auto,add,prev,extract
From: https://www.cnblogs.com/kurish/p/17668726.html

相关文章

  • CF1862G The Great Equalizer
    思路对于一个数组,每次操作会缩短排序后的数组的相邻两个数的差距,所以总共会执行\(k\)次操作,其中,\(k\)为排序后的数组的相邻两个数的最大差距。因为每次操作都会对最大数加\(1\),所以答案就是\(\text{数组中的最大数}+\text{排序后的数组的相邻两个数的最大差距}\)。因为......
  • G. The Great Equalizer
    G.TheGreatEqualizerTemaboughtanolddevicewithasmallscreenandaworn-outinscription"TheGreatEqualizer"ontheside.Thesellersaidthatthedeviceneedstobegivenanarray$a$ofintegersasinput,afterwhich"TheGreatE......
  • 活动 | 塑造软件新生态 赋能发展新变革——GreatSQL 受邀2023国际软博会
    塑造软件新生态,赋能发展新变革。8月31日-9月2日,第二十五届中国国际软件博览会将于天津梅江会展中心召开。本届软博会由中国电子信息行业联合会主办,聚焦全球软件前沿技术与产业发展方向,充分展示软件赋能数字经济、信息技术应用创新、工业互联网平台、智能制造及元宇宙等多领域发展......
  • 活动 | 塑造软件新生态 赋能发展新变革——GreatSQL 受邀2023国际软博会
    塑造软件新生态,赋能发展新变革。8月31日-9月2日,第二十五届中国国际软件博览会将于天津梅江会展中心召开。本届软博会由中国电子信息行业联合会主办,聚焦全球软件前沿技术与产业发展方向,充分展示软件赋能数字经济、信息技术应用创新、工业互联网平台、智能制造及元宇宙等多领域发展......
  • 探索GreatADM:图形化部署MGR的全新体验
    摘要:在DBA的日常工作中,快速部署数据库高可用架构,且标准化地入网部署数据库是一项重要的基础任务。本文将介绍常见的部署MGR的方式,并重点介绍万里数据库的GreatADM数据库管理平台进行图形化、可视化、标准化的部署过程,以提高交付效率和质量,给DBA提供一种全新的体验。(本文阅读大约......
  • Great Cow Gathering G
    GreatCowGatheringG思路换根dp,TreeDistancesI强化版,同样的先思考单个的,那么对于子树\(u\)对于每一个儿子\(v\)都有:\(f_u=f_v+sum_v*w_{u,v}\)其中\(sum\)是子树大小,而\(w\)则是边的长度,用这种方式可以求出以1为根的答案,然后考虑换根公式,首先要转移到的节点......
  • 图文结合丨带你轻松玩转MySQL Shell for GreatSQL
    一、引言1.1什么是MySQLShell?MySQLShell是MySQL的一个高级客户端和代码编辑器,是第二代MySQL客户端。第一代MySQL客户端即我们常用的MySQL。除了提供类似于MySQL的SQL功能外,MySQLShell还提供JavaScript和Python脚本功能,并包括与MySQL一起使用的API。......
  • GreatSQL从单机到MGR扩展纪实
    一、前言原有的业务系统跑在MySQL主从架构中,高可用通过脚本完成,但存在切换数据丢失和切换不及时风险,调研了高可用更稳定的MGR后,准备入手一试。本篇文章主要记录GreatSQL从单机扩展到MGR的详细过程,遇到的问题及解决方法。二、基础环境服务器角色如下IP端口主机名作用......
  • 数据质量管理工具预研——Griffin VS Deequ VS Great expectations VS Qualitis
    开源数据质量管理工具预研——GriffinVSDeequVSGreatexpectationsVSQualitis。概述 数据质量监控(DQC)是最近很火的一个话题,也是数据治理中最重要的一环。有一句话说得好。数据质量未必是数据治理中最重要的一部分,但是数据质量可能是让数据治理工作全部崩盘的第一步。所以......
  • GreatSQL通过错误日志信息判断数据库实例是如何关闭的
    背景概述在一次客户的数据库实例连接不上了,需要我们排查一下原因,通过查看数据库实例进程已经不存在了,在错误日志中没有发现其他报错信息,发现有shutdown的字样出现,怀疑是某个用户手动关闭了实例。我们通过以下测试,发现是由于用户关闭了主机所导致的。问题复现本次测试基于GreatS......