显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("Queries.in", "r", stdin);
freopen("Queries.out", "w", stdout);
ios::sync_with_stdio(0);cin.tie(0);
int n,q; cin>>n>>q;
vector<int> a(n),c(n);
for(auto &i:a) cin>>i,c[--i]++;
vector<set<int>> s(n+1); set<int> v;
for(int i:a) s[c[i]].insert(i),v.insert(c[i]);
while(q--){
int p,x; cin>>p>>x; p--,x--;
int k=a[p];
s[c[k]].erase(k);
if(s[c[k]].empty()) v.erase(c[k]);
s[--c[k]].insert(k);
v.insert(c[k]);
s[c[x]].erase(x);
if(s[c[x]].empty()) v.erase(c[x]);
s[++c[x]].insert(x);
v.insert(c[x]);
a[p]=x;
vector<int> e(v.begin(),v.end());
int r=0,mx=0;
for(int i=0,j=e.size()-1;i<e.size();++i){
if(!e[i]) continue;
while(~j && e[j] && e[j]+e[i]>=e.back()) mx=max(mx,*s[e[j]].rbegin()),j--;
r=max(r,mx-*s[e[i]].begin());
}
cout<<r<<'\n';
}
}