fogflea
fogflea
发布于 2025-10-18 / 4 阅读
0
0

CF1481E Sorting Books

#dp

problem

疑似神题

首先发现一个事情:相同颜色的书一定是一起动或者一起不动,即行为平行。

发现了这件事就可以简单 \texttt{dp} 了。

#include<bits/stdc++.h>
using namespace std;
#define fio(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
#define tio() freopen("in.txt","r",stdin),freopen("out.txt","w",stdout)
using ll=long long;
const int N=5e5+10;
int n;
int a[N],f[N];
int l[N],r[N],cnt[N];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
        if(!r[a[i]])r[a[i]]=n-i+1;
        l[a[i]]=n-i+1;
    }
    reverse(a+1,a+1+n);
    for(int i=1;i<=n;++i){
        ++cnt[a[i]];
        f[i]=f[i-1];
        if(r[a[i]]==i)f[i]=max(f[i],f[l[a[i]]-1]+cnt[a[i]]);
        else f[i]=max(f[i],cnt[a[i]]);
    }
    printf("%d",n-f[n]);
    return 0;
}

评论