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

G. The Great Equalizer

时间:2024-07-10 16:41:29浏览次数:12  
标签:Equalizer Great insert deta next erase st find

原题链接

题解

每次操作都会是排序后的元素差值减一,所以答案为初始序列最大值加上最大差值
用STL的multiset维护差值和序列值

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[200005];
void solve()
{
    int n;
    cin>>n;

    multiset<ll> st;
    multiset<ll> deta;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        st.insert(a[i]);
    }
    for(auto it=next(st.begin());it!=st.end();it=next(it)) deta.insert(*it-*prev(it));


    int q;
    cin>>q;
    while(q--)
    {
        int x,v;
        cin>>x>>v;

        auto it=st.find(a[x]);
        if(it==st.begin()) deta.erase(deta.find(*next(it)-*it));
        else if(next(it)==st.end()) deta.erase(deta.find(*it-*prev(it)));
        else
        {
            auto nxt=next(it),prv=prev(it);
            deta.erase(deta.find(*nxt-*it));
            deta.erase(deta.find(*it-*prv));
            deta.insert(*nxt-*prv);
        }


        st.erase(it);
        a[x]=v;
        st.insert(v);

        it=st.find(v);
        if(it==st.begin()) deta.insert(*next(it)-*it);
        else if(next(it)==st.end()) deta.insert(*it-*prev(it));
        else
        {
            auto nxt=next(it),prv=prev(it);
            deta.insert(*nxt-*it);
            deta.insert(*it-*prv);
            deta.erase(deta.find(*nxt-*prv));
        }

        cout<<*deta.rbegin()+*st.rbegin()<<' ';
    }
    cout<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--) solve();
    return 0;
}


标签:Equalizer,Great,insert,deta,next,erase,st,find
From: https://www.cnblogs.com/pure4knowledge/p/18294419

相关文章

  • 中英双语介绍英国(The United Kingdom)以及Great Britain为什么翻译成大不列颠?
    英国简介中文版英国,全称大不列颠及北爱尔兰联合王国(TheUnitedKingdomofGreatBritainandNorthernIreland),位于欧洲西北部,由英格兰、苏格兰、威尔士和北爱尔兰组成。以下是对英国的详细介绍,包括其地理位置、人口、经济、教育、文化和主要城市。Source:GoogleMap地......
  • GreatSQL 中 Insert 慢是什么情况?
    GreatSQL中Insert慢是什么情况?背景概述客户反映,业务上某张表的Insert操作速度很慢,单条Insert语句的最大执行时间超过了5秒。在收到客户问题后,我们仔细检查了数据库状态以及主机的负载情况,发现目前一切正常,并没有发现数据库故障或主机负载过高导致insert操作变慢的问题......
  • 磐维数据库安装提示max_process_memory must greater than问题
    很多人在个人虚拟机部署磐维测试环境时会碰上一个提示内存太少的报错,多数是因为虚拟机给的内存太少了。遇到报错也可以不用调整虚拟机内存,可以调整参数解决。报错示例如下:BACKEND]FATAL:thevaluesofmemoryoutoflimit,thedatabasefailedtobestarted,max_process_mem......
  • [题解]CF1092D1 Great Vova Wall (Version 1)
    思路发现,如果相邻元素的奇偶性相同,那么一定能通过在较低的位置竖着放若干个如果在\(i\)的位置竖着放一块砖头,使得这两列的高度相同。那么,我们想到直接考虑\(h_i\)的奇偶性,即将\(h_i\leftarrowh_i\bmod2\)。如果\(h_i=h_{i+1}\),我们显然可以同时使\(h_i\)和\(h......
  • 快速上手 GreatSQL 8.0.32-25 with openEuler 24.03 LTS
    5月底,openEuler24.03LTS发布,详情戳:恭喜!openEuler24.03LTS版本发布:首个AI原生开源操作系统在诸多亮点特性中,有一条值得注意:集成GreatSQL数据库,适用于金融级应用场景,具有高可用、高性能、高兼容、高安全等特性。那么,本文就来介绍一下如何安装openEuler24.0......
  • MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项
    一、背景概述在将数据库从MySQL5.7迁移到GreatSQL8.0.32时,由于数据量较小且关注安全性,决定使用mysqldump执行逻辑备份,并将数据导入GreatSQL。但在备份时采用了备份全库(--all-databases)的方式,在导入GreatSQL后,修改用户密码时出现错误。这是因为mysqldump备份时包括了mysql系统......
  • LeetCode Greatest Common Divisor of Strings All In One
    LeetCodeGreatestCommonDivisorofStringsAllInOneLeetCode1071errorsfunctiongcdOfStrings(str1:string,str2:string):string{letresult=``;lettemp=[];if(str1.length>str2.length){letreg=newRegExp(str2,'g'......
  • GreatSQL数据库DROP表后无法重建
    一、数据库信息:数据库版本:5.7.21-log某银行测试数据库,APP业务库内有一个含有大量(几百个)分区表的大表test_app。DROP该分区表的大表后导致无法重建该分区表。二、问题描述:客户使用“droptabletest_app;”时,显示表删除成功。当重新执行该表的建表语句时,报错“Table'app.test_......
  • GreatSQL的sp中添加新的sp_instr引入的bug解析
    GreatSQL的sp中添加新的sp_instr引入的bug解析一、问题发现在一次开发中用到的sp需要添加新的sp_instr以满足需求,但是添加了数个sp_instr以后发现执行新的sp会发生core。注:本次使用的GreatSQL8.0.32-251、sp_head.cc的init_sp_psi_keys()代码里面添加10个新的sp_instr:void......
  • GreatSQL统计信息相关知识点
    相关知识点:INNODB_STATS_PERSIST=ON或用STATS_PERSIST=1定义单个表时,优化器统计信息将持久化到磁盘。默认情况下,innodb_stats_persistent是启用的。持久统计信息存储在mysql.innodb_table_stats和mysql.innodb_index_stats表中。默认情况下启用的innodb_stats_auto_recalc变量......