| 比赛 |
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;
}