| 比赛 |
26暑假集训模拟赛3 |
评测结果 |
AAAAAAATTTTTTTT |
| 题目名称 |
Election Queries |
最终得分 |
44 |
| 用户昵称 |
123 |
运行时间 |
25.131 s |
| 代码语言 |
C++ |
内存使用 |
46.72 MiB |
| 提交时间 |
2026-07-06 11:45:35 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=8e5+10,mod=1e9+7;
int n,q,a[N],mp[N],tot=0,mi[N],mx[N];
set<int> s[N];
void solve()
{
cin>>n>>q;mi[n+1]=1e9;
for (int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++;
for (int i=1;i<=n;i++) s[mp[i]].insert(i);
while (q--)
{
int x,y;
cin>>x>>y;
s[mp[a[x]]].erase(a[x]),mp[a[x]]--,s[mp[a[x]]].insert(a[x]);
s[mp[y]].erase(y),mp[y]++,s[mp[y]].insert(y);// cout<<1<<endl;
a[x]=y;
int qmx=0;
for (int i=n;i>=1;i--)
{
mi[i]=mi[i+1],mx[i]=mx[i+1];
if (!s[i].empty())
{
mi[i]=min(mi[i],*s[i].begin());
auto it=s[i].end();it--;
mx[i]=max(mx[i],*it);
if (!qmx) qmx=i;
}
}
int ans=0;
for (int i=qmx;i>=1;i--)
{
if (s[i].empty()) continue;
auto it=s[i].end();it--;
int cnt=max(1,qmx-i);
ans=max(ans,max(*it-mi[cnt],mx[cnt]-*s[i].begin()));
}
cout<<ans<<"\n";
}
}
int main() {
freopen("Queries.in","r",stdin);
freopen("Queries.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0);
solve();
return 0;
}