比赛 26暑假集训模拟赛3 评测结果 RRRRRRRRRRRRRRR
题目名称 Election Queries 最终得分 0
用户昵称 PXCZM 运行时间 25.013 s
代码语言 C++ 内存使用 4.38 MiB
提交时间 2026-07-06 11:03:51
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[200010],b[200010];
int main()
{
    freopen("Queries.in","r",stdin);
    freopen("Queries.out.","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        ++b[a[i]];
    }
    while(m--)
    {
        int x,y,Max=0,ans=0; cin>>x>>y;
        --b[a[x]];
        a[x]=y;
        ++b[a[x]];
        vector<int>v1,v2;
        for(int i=1;i<=n;i++) Max=max(Max,b[i]);
        for(int i=1,j=0;i<=n;i++)
            if(b[i]>j)
            {
                v1.push_back(i);
                j=b[i];
            }
        for(int i=n,j=0;i>=1;i--)
            if(b[i]>j)
            {
                v2.push_back(i);
                j=b[i];
            }
        int len1=v1.size(),len2=v2.size();
        for(int i=0,j=len2-1;i<len1;i++)
        {
            for(;j>=0&&v2[j]<v1[i];j--);
            if(j<0) break;
            for(;j>0&&b[v2[j-1]]+b[v1[i]]>=Max;j--);
            ans=max(ans,v2[j]-v1[i]);
        }
        cout<<ans<<'\n';
    }
    return 0;
}