赞
踩
添加链接描述
官方证明极为恐怖 明白性质就好
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N],nxt[N],lst[N]; int main(){ int n; scanf("%d",&n); int color=0,cnta=0,cntb=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } nxt[0]=n+1; for(int i=1;i<=n;i++)lst[a[i]]=n+1; for(int i=n;i>=1;i--){ nxt[i]=lst[a[i]];//第一次出现是n+1 lst[a[i]]=i;//第二次出现为当前下标 } int a0=0,a1=0; int ans=0; for(int i=1;i<=n;i++){//max if(a[a0]!=a[i]&&a[a1]!=a[i]){//都可以放时 if(nxt[a0]<nxt[a1])a0=i;//如果下一个重复的数小于 尽可能的不重复 else a1=i; ans++; } else if(a[i]!=a[a0])a0=i,ans++; else if(a[i]!=a[a1])a1=i,ans++; else a0=i,a1=i;//都相同 }// printf("%d\n",ans);// return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。