Machine Learning(带修莫队)
Posted thusloop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Machine Learning(带修莫队)相关的知识,希望对你有一定的参考价值。
Machine Learning
区间出现次数的mex
用桶暴力求mex
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=8e18;
const int maxn=5e5+100;
int a[maxn],cnt[maxn],c[maxn];
int ans[maxn],pos[maxn];
map<int,int>mp;
int sz;
int l,r;
int res=1;
struct node
{
int l,r;
int id;
int ti;
} t1[maxn];
struct node2
{
int p,w;
} t2[maxn];
bool cmp(node a,node b)
{
if(pos[a.l]!=pos[b.l])return pos[a.l]<pos[b.l];
if(pos[a.r]!=pos[b.r])return pos[a.r]<pos[b.r];
return a.ti<b.ti;
}
void add(int x)
{
if(cnt[c[x]]==1)
{
res=min(res,c[x]);
}
cnt[c[x]]--;
c[x]++;
cnt[c[x]]++;
while(cnt[res]) res++;
}
void del(int x)
{
if(cnt[c[x]]==1)
{
res=min(res,c[x]);
}
cnt[c[x]]--;
c[x]--;
cnt[c[x]]++;
while(cnt[res]) res++;
}
void change(int x)
{
if(l<=t2[x].p&&t2[x].p<=r)
{
del(a[t2[x].p]);
add(t2[x].w);
}
swap(a[t2[x].p],t2[x].w);
}
signed main()
{
IOS
int n,q;
cin>>n>>q;
sz=pow(n,2.0/3.0);
for(int i=1; i<=n; i++)
{
cin>>a[i];
mp[a[i]]=1;
pos[i]=i/sz+1;
}
int cnum=0,qnum=0;
for(int i=1; i<=q; i++)
{
int op,l,r;
cin>>op>>l>>r;
if(op==1)
{
++qnum;
t1[qnum]= {l,r,qnum,cnum};
}
else
{
++cnum;
mp[r]=1;
t2[cnum]= {l,r};
}
}
int mx=0;
for(auto it:mp)
{
mp[it.fi]=++mx;
}
for(int i=1; i<=n; i++) a[i]=mp[a[i]];
for(int i=1; i<=cnum; i++) t2[i].w=mp[t2[i].w];
sort(t1+1,t1+qnum+1,cmp);
l=1;
r=0;
int ti=0;
for(int i=1; i<=qnum; i++)
{
while(l>t1[i].l) add(a[--l]);
while(r<t1[i].r) add(a[++r]);
while(l<t1[i].l) del(a[l++]);
while(r>t1[i].r) del(a[r--]);
while(ti<t1[i].ti) change(++ti);
while(ti>t1[i].ti) change(ti--);
//res=1;
//while(cnt[res])res++;
ans[t1[i].id]=res;
}
for(int i=1; i<=qnum; i++)
{
cout<<ans[i]<<"\\n";
}
}
以上是关于Machine Learning(带修莫队)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #466 (Div. 2) F. Machine Learning 莫队+分块 带修莫队的模板题